2014-11-01 72 views
2

图像一个基本模板是这样的: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变量,但它会产生“风格是不确定的”。

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

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

不幸的是,导入也不起作用。它不会再告诉你“样式未定义”,但它不会在父模板的头部显示。

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

这怎么解决?

PS:如果您想测试它,您需要将jinja2.ext.do添加到扩展名中。

回答

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 %}