jinja变量在url\u for()中

v64noz0r  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(358)

我有一个由链接访问的服务的列表,我使用jinja中的for语句和flask提供的url\u for()函数来显示它们。

{% for service in services %}
        <a href={{ url_for(service.service_url) }}>{{service.service_name}} </a>
    {% endfor %}

正如@arsho在routes文件中声明的服务列表中所回答的那样,这可以正常工作 app.py :

services = [
    {
        "service_url": "first_page",
        "service_name": "First Page Service"
    },
    {
        "service_url": "second_page",
        "service_name": "Second Page Service"
    },
    {
        "service_url": "third_page",
        "service_name": "Third Page Service"
    }
    ]

在本例中,我使用以下语句恢复存储在sqlite数据库中的列表 services = Services.query.all() 服务类声明如下: models.py ```
class Services(db.Model):
id = db.Column(db.Integer, primary_key=True)
service_name = db.Column(db.String(32))
service_url = db.Column(db.String(32))

使用 flask 外壳,我可以看到数据库中的内容:

service = Services.query.all()
for service in services:
... service.service_name
...
'First Page Service'
'Second Page Service'
'Third Page Service'
for service in services:
... service.service_url
...
'first_page'
'second_page'
'third_page'

但在这种情况下 `<a href={{ url_for(service.service_url) }}>{{service.service_name}} </a>` 返回内部服务器错误。
编辑:解决了这个问题,我在服务列表中的一个页面没有在routes文件中声明
idfiyjo8

idfiyjo81#

如果要打印中变量的值,则不需要使用单引号 jinja 模板。
flask.url_for 文档, url_for 接受方法名称作为参数。
下面是一个示例,我们如何在 url_for 方法。 app.py :

from flask import Flask, render_template, url_for, request

app = Flask(__name__)

@app.route('/first')
def first_page():
    return 'First page'

@app.route('/second')
def second_page():
    return 'Second page'

@app.route('/third')
def third_page():
    return 'Third page'

@app.route("/", methods=["GET"])
def home():
    services = [
    {
        "service_url": "first_page",
        "service_name": "First Page Service"
    },
    {
        "service_url": "second_page",
        "service_name": "Second Page Service"
    },
    {
        "service_url": "third_page",
        "service_name": "Third Page Service"
    }
    ]

    return render_template("url_for_example.html", services=services)
``` `url_for_example.html` :

相关问题