Python django模板中的宏

Python django模板中的宏,python,django,macros,jinja2,Python,Django,Macros,Jinja2,在jinja中,我可以创建宏并在模板中调用它,如下所示: {% macro create_list(some_list) %} <ul> {% for item in some_list %} <li>{{ item }}</li> {% endfor %} </ul> {% endmacro %} HTML code.... {{ create_list(list1) }} {{ create_list(list2)

在jinja中,我可以创建宏并在模板中调用它,如下所示:

{% macro create_list(some_list) %}
<ul>
    {% for item in some_list %}
    <li>{{ item }}</li>
    {% endfor %}
</ul>
{% endmacro %}

HTML code....

{{ create_list(list1) }}
{{ create_list(list2) }}
{{ create_list(list3) }}
{%macro create_list(some_list)%}
    {某些_列表%中的项的%s}
  • {{item}}
  • {%endfor%}
{%endmacro%} HTML代码。。。。 {{create_list(list1)} {{create_list(list2)} {{create_list(list3)}

我在django文档中读到django模板没有宏标记。我对在django模板中执行类似操作的最佳方法感兴趣。

正如您已经说过的,django的模板语言中不存在宏

模板中有一些模板标记可以完成更困难的事情,但这也不是您想要的,因为django的模板系统也不允许将参数传递给函数

对于您的示例,最好使用include标记:

下面是我将如何使用它:

模板/代码片段/list.html

<ul>
{% for item in list %}
   <li>{{ item }}</li>
{% endfor %}
</ul>

模板/partials/example-partial.html

{%if partial_name == 'partial1'%}
<ul>
{% for item in list %}
   <li>{{ item }}</li>
{% endfor %}
</ul>
{%endif%}


{%if partial_name == 'partial2'%}
<ul>
{% for item in list %}
   <li>{{ item }}</li>
{% endfor %}
</ul>
{%endif%}


{%if partial_name == 'partial3'%}
<ul>
{% for item in list %}
   <li>{{ item }}</li>
{% endfor %}
</ul>
{%endif%}

我发现有两个软件包可以提供:


它们看起来工作原理相同:使用pip安装,放入已安装的应用程序,
{%load macros%}
在模板中编写并使用它们。

。。。只要开始在Django中使用jinja即可。 打开它很容易
当然,对于不同的文件,您可以同时使用两个模板引擎。

在Django模板语言中,不支持宏,但您可以选择Jinja引擎以使用宏。请记住,如果您正在构建一个可插入的应用程序,Django建议使用DTL

Django项目可以配置一个或多个模板 引擎(如果不使用模板,甚至为零)。Django船 它自己的模板系统的内置后端,创造性地称为 Django模板语言(DTL),用于流行的替代语言 金甲2号

Django模板语言是Django自己的模板系统。直到 Django 1.8是唯一可用的内置选项。这是个好主意 模板库,尽管它相当固执己见,而且有一些 特质。如果你没有迫切的理由选择另一个 后端,您应该使用DTL,尤其是在编写 可插拔应用程序,您打算分发模板。德扬戈氏 包含模板的contrib应用程序,如django.contrib.admin,使用 DTL

以下是配置其他模板引擎的文档链接:

{%if partial_name == 'partial1'%}
<ul>
{% for item in list %}
   <li>{{ item }}</li>
{% endfor %}
</ul>
{%endif%}


{%if partial_name == 'partial2'%}
<ul>
{% for item in list %}
   <li>{{ item }}</li>
{% endfor %}
</ul>
{%endif%}


{%if partial_name == 'partial3'%}
<ul>
{% for item in list %}
   <li>{{ item }}</li>
{% endfor %}
</ul>
{%endif%}
{% include 'partials/example-partial.html' with list=list1 partial_name="partial1"%}
{% include 'partials/example-partial.html' with list=list2 partial_name="partial2"%}
{% include 'partials/example-partial.html' with list=list3 partial_name="partial3"%}