将上下文传递给 Jinja 模板中包含的 Jinja 模板

Pass context to included Jinja Template in Jinja Template

我在所有 Jinja 文件中都有共同点。我想将所有常见内容移动到 Flask 中的一个 Jinja 文件中。

我的应用程序是用 Flask 编写的,我将上下文传递给 Jinja 模板,例如

def f1(name): render_template('j1.jinja', name=name)

def f2(name): render_template('j2.jinja', name=name)

def f3(name): render_template('j3.jinja', name=name)

我的 j1.jinja 文件是:

{%block content %}
Name: {{ name }}
Hello
{% endblock %}

我的 j2.jinja 文件是:

{%block content %}
Name: {{ name }}
Bye
{% endblock %}

我的 j3.jinja 文件是:

{%block content %}
Name: {{ name }}
Howdy
{% endblock %}

我将通用内容移动到单个 Jinja 文件 common.jinja 即:

{% block content %}
Name : {{name}}
{% endblock %}

我将它包含在所有 Jinja 文件中,例如:

{% include 'common.jinja' with { "name": name } only %}

这是行不通的。我收到异常:

Exception Occured. Explanation: expected token 'end of statement block', got 'with'

如何将上下文传递给包含的 Jinja 文件?

您的代码看起来有点奇怪。没有单独的 with 语句来指定上下文,它是 with context,它通常与 import 语句一起使用(请参阅 Import context behaviour)。

要将任何上下文传递给包含的模板,只需使用上下文变量渲染父模板,例如在 render_template():

render_template('j3.jinja', name=name)