在Jinja2中,宏和包含似乎完全相同。
e.g。
{% macro input(name, value='', type='text') -%}
<input type="{{ type }}" value="{{ value|e }}" name="{{ name }}">
{%- endmacro %}
{{ input('password', type='password') }}
-- versus --
{% include 'input.html' %}
input.html file>
<input type="{{ type }}" value="{{ value|e }}" name="{{ name }}">
为了澄清它们的用途:
答案 0 :(得分:2)
如果目标只是包含一个文本块,那么macro
和include
会提供相同的目标。但是在您的示例中,macro
更灵活,可用于传递参数并使用它们。
回答问题
严格来说,一个人不会在另一个人没有的地方工作。但是include
确实需要一些灵活性。例如,如果我想使用include
语句显示表单的几个不同字段,那么很难做到。我必须为每个字段制作不同的模板文件并单独包含它们,因为它们不能接受参数,这会破坏目的。
如果你有一大堆代码,你认为应该出现在另一个模板中,只是为了更好的组织,它不需要采取任何参数,例如页眉,页脚,复杂的导航菜单等那么include
对这种情况有好处。但是当你有一些东西会重复多次并且可能需要一些动态参数时,例如表单字段,然后您应该使用macro
。