我正在阅读“Flask web development”。 在例4-3中,
{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
我想知道: 扩展和导入之间有什么区别?(我认为它们在使用上非常相似。) 在哪种情况下,我会使用extends或import?
答案 0 :(得分:5)
当你extend
另一个模板时,模板会控制你(被叫控制调用者) - 只有'#34; parent"模板将呈现:
{% 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 :(得分:1)
是的区别。 {% extends parent.html %}
允许您呈现parent.html
并覆盖其中定义的{% block %}
,而{% import %}
只允许您访问模板变量。
因此,示例模板扩展base.html
并从bootstrap/wtf.html
导入变量。把它想象成python的类继承和import语句。
答案 2 :(得分:0)
默认情况下,包含的模板将传递给当前上下文,而导入的模板则不会。 Jinja documentation
默认情况下,导入的文件不会缓存包含的模板。
原因是导入通常用作保存宏的模块。
最佳做法是在包含宏的模板上使用导入,而当你只是想要一些标记模板时,最好使用include。