首页 > 解决方案 > JinJa 模板中的全局 url_for

问题描述

我将 base_template 读为

Example 3-10. templates/base.html: favicon definition
#+BEGIN_SRC html
{% block head %}
{{ super() }} <!-- preserve the original contents -->
<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}"
    type="image/x-icon">
<link rel="icon" href="{{ url_for('static', filename='favicon.ico') }}"
    type="image/x-icon">
{% endblock %}
#+END_SRC

和视图功能:

from datetime import datetime
from flask import Flask, render_template
from flask_bootstrap import Bootstrap
from flask_moment import Moment

app = Flask(__name__)

bootstrap = Bootstrap(app)
moment = Moment(app)
..
@app.route('/')
def index():
    return render_template('index.html',
                           current_time=datetime.utcnow())

至于url_for没有传递给上下文的index,怎么能直接在模板中使用呢。

搜索 JinJia2 docs 因此没有找到url_for关键字,实际上是从顶层导入的

In [1]: from flask import url_for        

In [2]:    

标签: python-3.xflask

解决方案


Context Processor充当 HTML 和 Python 之间的桥梁,您可以将信息从视图函数传递到 HTML。

来自 Flask 文档

为了将新变量自动注入到模板的上下文中,Flask 中存在上下文处理器。上下文处理器在模板渲染之前运行,并且能够将新值注入到模板上下文中。上下文处理器是一个返回字典的函数。

@app.context_processor
def inject_user_last_name():
    return {last_name=user.last_name}

现在您可以访问last_name模板中的 ,而无需将 last_name 传递给每个render_template.

这是参考的默认标准上下文变量列表。

  1. 配置
  2. 要求
  3. 会议
  4. G
  5. url_for
  6. get_flashed_messages

推荐阅读