【问题标题】:Jinja variable in url_for()url_for() 中的 Jinja 变量
【发布时间】:2020-09-30 23:58:30
【问题描述】:

我有一个通过链接访问的服务列表,我使用 Jinja 中的 for 语句和 flask 提供的 url_for() 函数显示它们。

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

@arsho 用路由文件中声明的服务列表回答了这个问题

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()

Services 类声明如下:

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))

使用烧瓶外壳,我可以查看数据库中的内容:

>>>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'

但在这种情况下,同一行 &lt;a href={{ url_for(service.service_url) }}&gt;{{service.service_name}} &lt;/a&gt; 返回内部服务器错误。

编辑:解决了,我在服务列表中的一个页面没有在路由文件中声明

【问题讨论】:

    标签: python sql sqlite flask jinja2


    【解决方案1】:

    如果要打印来自jinja 模板中变量的值,则无需使用单引号。

    flask.url_for documentationurl_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:

    <html>
    <head>
      <title>Dynamic URL Example</title>
    </head>
    <body>
        <ul>
        {% for service in services %}
            <li>
                <a href={{ url_for(service.service_url) }}>{{service.service_name}} </a>
            </li>
        {% endfor %}
        </ul>
    </body>
    </html>
    

    输出:

    回家路线:

    点击第二页网址后:

    【讨论】:

      猜你喜欢
      • 2014-07-22
      • 2021-03-17
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 2020-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多