这些是我写的代码:
application.py :
from flask import Flask, render_template
app = Flask(__name__)
@app.context_processor
def inject_foo():
return dict(foo='bar')
@app.route('/')
def index():
return render_template('index.html')
的index.html :
{% from 'macros.html' import print_foo %}
<p>print_foo: {{ print_foo() }}</p>
<p>foo(directly): {{ foo }}</p>
macros.html :
{% macro print_foo() %}
foo is {{ foo }}
{% endmacro %}
文件的结构如下:
flask-context-processor-issue/
application.py
templates/
index.html
macros.html
当我运行应用程序(通过flask run
)并转到http://localhost:5000
时,我会看到此页:
print_foo: foo is
foo(directly): bar
缺少foo
的 print_foo
。我认为原因是foo
在print_foo
宏(在导入的模板中)中不可见。
我可以通过修改foo
:
application.py
全局可见
...
# @app.context_processor
# def inject_foo():
# return dict(foo='bar')
app.jinja_env.globals['foo'] = 'bar'
...
但是与app.context_processor
一起工作是我认为的一般方式,所以我想知道是否有任何方法可以使示例有效(使用app.context_processor
)。
等待你的回答,谢谢。
答案 0 :(得分:1)
仔细观察文档(http://flask.pocoo.org/docs/0.12/templating/#context-processors)后,我发现这应该有用:
<强>的index.html 强>:
{% from 'macros.html' import print_foo with context %}
...
而不是
{% from 'macros.html' import print_foo %}
...
愚蠢的我。