2014-11-01 94 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 %}