【问题标题】:In Jinja2, when should one use macro and when should one use include?在 Jinja2 中,什么时候应该使用宏,什么时候应该使用 include?
【发布时间】:2014-03-09 19:39:37
【问题描述】:

在 Jinja2 中,宏和包含似乎做了几乎相同的事情。

例如

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

为了阐明它们的用途:

  1. 是否有一个时间可以工作,而另一个不可以?
  2. 如果两者都能奏效,我们应该在什么时候选择一个而不是另一个?

【问题讨论】:

    标签: templates flask jinja2


    【解决方案1】:

    如果目标只是包含一段文本,那么macroinclude 服务于相同的目标。但就像在你的例子中一样,macros 更加灵活,可以用来传递参数并使用它们。

    回答问题

    1. 严格来说,一个不能工作的情况并非如此。但是includes 确实采取了一些灵活性。例如,如果我想使用include 语句显示表单的多个不同字段,那将很难做到。我必须为每个字段制作不同的模板文件并单独包含它们,因为它们不能接受参数,这会破坏目的。

    2. 当你有一段代码你认为应该出现在不同的模板中以便更好地组织并且不需要任何参数时. 然后include 适合这种情况。但是当你有一些东西会重复多次并且可能需要一些动态参数时,例如表单字段,那么你应该使用macro

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 2011-04-15
      • 2017-04-10
      • 2012-03-19
      • 2018-05-12
      • 2018-12-11
      • 1970-01-01
      • 2022-09-28
      • 2021-09-07
      相关资源
      最近更新 更多