【问题标题】:Creating link to an url of Flask app in jinja2 template在 jinja2 模板中创建指向 Flask 应用程序 url 的链接
【发布时间】:2012-06-22 21:46:42
【问题描述】:

在我的 Flask 应用程序中,我有一个显示帖子的视图

@post_blueprint.route('/post/<int:year>/<int:month>/<title>')
def get_post(year,month,title):
    # My code

要显示最后 10 个条目,我有以下视图:

@post_blueprint.route('/posts/')
def get_all_posts():
    # My code
    return render_template('p.html',posts=posts)

现在,当我显示最后 10 个帖子时,我想将帖子的标题转换为超链接。 目前我必须在我的 jinja 模板中执行以下操作才能实现此目的:

<a href="/post/{{year}}/{{month}}/{{title}}">{{title}}</a>

有什么方法可以避免对 url 进行硬编码?

url_for 函数,它用于创建这样的 Flask url:

url_for('view_name',**arguments)

我试过找一个,但我找不到。

【问题讨论】:

  • 所以你想让 url_for 使用 kwargs?做到这一点的唯一方法是将帖子作为字典列表。我不相信有办法在不首先更改视图中的逻辑的情况下做到这一点。

标签: python flask jinja2 url-for


【解决方案1】:

我觉得你在这里问了两个问题,但我会试一试......

对于发布网址,您可以这样做:

<a href="{{ url_for('post_blueprint.get_post', year=year, month=month, title=title)}}">
    {{ title }}
</a>

要处理静态文件,我强烈建议使用像 Flask-Assets 这样的资产管理器,但要使用香草烧瓶来处理:

{{ url_for('static', filename='[filenameofstaticfile]') }}

如果您想了解更多信息,我强烈建议您阅读。 http://flask.pocoo.org/docs/quickstart/#static-fileshttp://flask.pocoo.org/docs/quickstart/#url-building

使用 kwargs 进行编辑:

只是觉得我会更彻底...

如果您想像这样使用url_for

{{ url_for('post_blueprint.get_post', **post) }}

您必须将视图更改为以下内容:

@post_blueprint.route('/posts/')
def get_all_posts():
    models = database_call_of_some_kind # This is assuming you use some kind of model
    posts = []
    for model in models:
        posts.append(dict(year=model.year, month=model.month, title=model.title))
    return render_template('p.html', posts=posts)

那么你的模板代码可以如下所示:

{% for post in posts %}
    <a href="{{ url_for('post_blueprint.get_post', **post) }}">
        {{ post['title'] }}
    </a>
{% endfor %}

此时,我实际上会在模型上创建一个方法,这样您就不必将其转换为 dict,但能走多远取决于您 :-)。

【讨论】:

  • models 类型是什么,为什么我们需要把它变成一个字典?我们不能将它传递给我们的视图并在那里迭代吗?
猜你喜欢
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 2012-06-10
  • 2019-10-27
  • 2013-04-17
  • 2015-04-20
  • 1970-01-01
相关资源
最近更新 更多