Python 2.7 Jinja2使用父模板中的变量

Python 2.7 Jinja2使用父模板中的变量,python-2.7,jinja2,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> {% b

将基本模板镜像如下:

{% 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>
{% extends "base.html" %}

{% block styles %}
  <link href="{{style}}" ref="stylesheet" type="text/css; charset=utf8"> {# all css files you need #}
{% endblock styles %}
解决这个问题的一个方法是,在从Python代码呈现模板时,将
样式定义为空列表。但我不想将
style=[]
添加到我渲染的每个模板中

不幸的是,导入也不起作用。它不会再告诉您“样式未定义”,但它不会在父模板的头部分进行渲染

{% extends "base.html" %}
{% from "base.html" import styles %}
{% do styles.append("index.css") %}
如何解决这个问题


PS:如果您想测试它,您需要向扩展添加
jinja2.ext.do

您可以使用块来实现这一点

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>
{% extends "base.html" %}

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