2016-08-16 37 views
3

我在阅读“烧瓶网站开发”。 例4-3,Flask中导入和扩展有什么区别?

{% extends "base.html" %} 
{% import "bootstrap/wtf.html" as wtf %} 

我想知道: 有什么区别之间延伸,并导入(我觉得他们是在使用颇为相似) 在什么情况下,我将使用扩展还是导入?

回答

5

当你extend另一个模板的模板来控制你(称为控件的调用者) - 在“父”模板仅命名块将呈现:

{% extends "base.html" %} 
{% block main_content %} 
Only shows up if there is a block called main_content 
in base.html. 
{% endblock main_content%} 

另外一个import简单绑定模板添加到您的模板范围中的名称,并且您可以控制何时何地呼叫它(呼叫者控制呼叫):

{% import "bootstrap/wtf.html" as wtf %} 
Some of your own template code with {{ wtf.calls() }} where it makes sense. 
1

还有有区别。 {% extends parent.html %}允许您渲染parent.html并覆盖{% block %}的定义,{% import %}只允许您访问模板变量。

因此,示例模板扩展为base.html并从bootstrap/wtf.html导入变量。想想它像python的类继承和导入语句。

0

默认情况下,包含的模板传递给当前上下文,而导入的模板则不传递。 Jinja documentation

默认情况下将包括模版,同时进口将被缓存。

原因是导入通常被用作保存宏的模块。

最好的做法是在包含宏的模板上使用导入,而当你只是想要一些标记模板时,最好使用include。

相关问题