python - Macros en plantillas django
jinja2 (3)
Como ya dijiste, las macros no existen en los lenguajes de creación de plantillas de django.
Hay etiquetas de plantilla para hacer cosas más difíciles en las plantillas, pero eso tampoco es lo que estás buscando, porque el sistema de plantillas de django tampoco permite que los parámetros pasen a las funciones.
Lo mejor para su ejemplo sería usar la etiqueta de inclusión:
https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#include
Así es como lo usaría:
templates / snippets / list.html
<ul>
{% for item in list %}
<li>{{ item }}</li>
{% endfor %}
</ul>
templates / index.html
{% include ''snippets/list.html'' with list=list1 %}
{% include ''snippets/list.html'' with list=list2 %}
{% include ''snippets/list.html'' with list=list3 %}
...
En jinja puedo crear macros y llamarlo en mi plantilla de esta manera:
{% 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) }}
Leí en django documentos que las plantillas de django no tienen etiqueta de macro. Estoy interesado en la mejor manera de hacer algo como esto en las plantillas de django.
template / 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%}
templates / index.html
{% 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"%}
Encontré dos paquetes para ofrecer eso:
ambos parecen trabajar de la misma manera: instalar con pip, poner INSTALLED_APPS, {% load macros %}
en la plantilla, escribirlos y usarlos.