2015-07-25 10 views
6

a Jinja posso creare macro e chiamarlo nel mio modello come questo:Macro in modelli di Django

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

ho letto nei documenti Django Django che i modelli non ha macro tag. Mi interessa il modo migliore per fare qualcosa del genere nei template di Django.

risposta

8

Come già detto, le macro non esistono nei linguaggi dei modelli di Django.

Ci sono tag modello per fare cose più difficili nei modelli, ma non è quello che stai cercando, perché il sistema di template di django non consente anche il passaggio dei parametri alle funzioni.

La cosa migliore per il tuo esempio potrebbe essere quello di utilizzare il tag includono:
https://docs.djangoproject.com/en/1.8/ref/templates/builtins/#include

Ecco come avrei usato:

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 %} 
... 
1

template/parziali/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"%} 
0

... basta iniziare a utilizzare jinja con Django. è molto facile accenderlo ed è possibile utilizzare entrambi i motori di template contemporaneamente, ovviamente per file diversi.