Jinja2使用父模板中的变量

时间:2014-11-01 11:06:58

标签: python-2.7 jinja2

像这样形成一个基本模板:

{% set styles = [] %}
<!DOCTYPE html>
<html>
  <head>
    {% for style in styles %}
    <link href="{{style}}" ref="stylesheet" type="text/css; charset=utf8">
    {% endfor %}
  </head>
  <body>
    {% block body %}
    {% endblock %}
  </body>
</html>

我想从子模板附加到styles变量,但它会产生&#34;样式未定义&#34;。

{% extends "base.html" %}
{% do styles.append("index.css") %}

对此的一个解决方案是在从Python代码渲染模板时将styles定义为空列表。但我不想为我呈现的每个模板添加styles=[]

不幸的是,导入也不起作用。它不会再告诉你&#34;样式未定义&#34;,但它只是在父模板的head部分中不会呈现。

{% extends "base.html" %}
{% from "base.html" import styles %}
{% do styles.append("index.css") %}

如何解决这个问题?

PS:如果要进行测试,则需要在扩展名中添加jinja2.ext.do

1 个答案:

答案 0 :(得分:0)

您可以使用块

来实现此目的

base.html看起来像这样

<!DOCTYPE html>
<html>
  <head>
    <link href="{{style}}" ref="stylesheet" type="text/css; charset=utf8"> {# all global css includes you need #}
    {% block styles %}
    {% endblock styles %}
  </head>
  <body>
    {% block body %}
    {% endblock %}
  </body>
</html>

然后child.html看起来像这样:

{% extends "base.html" %}

{% block styles %}
  <link href="{{style}}" ref="stylesheet" type="text/css; charset=utf8"> {# all css files you need #}
{% endblock styles %}