En utilisant Django moteur de création de modèles, je peux inclure un autre modèle partiel tout en définissant un contexte personnalisé à l'aide d'arguments nommés, comme ceci:
{% include "list.html" with articles=articles_list1 only %}
{% include "list.html" with articles=articles_list2 only %}
Comme vous le supposez, articles_list1
et articles_list2
sont deux listes différentes, mais je peux réutiliser la même list.html
modèle qui utilisera la variable articles
.
J'essaie d'obtenir la même chose en utilisant Jinja2, mais je ne vois pas quelle est la méthode recommandée, car le mot clé with
n'est pas pris en charge.
Pour les lecteurs de 2017+, Jinja en date de 2.9
inclut l'instruction with
par défaut. Aucune extension nécessaire.
http://jinja.pocoo.org/docs/2.9/templates/#with-statement
Dans les anciennes versions de Jinja (avant 2.9), il était nécessaire d'activer cette fonctionnalité avec une extension. Il est désormais activé par défaut.
Jinja2 a ne extension qui active le mot clé with
- il ne vous donnera pas la même syntaxe que Django, et il se peut qu'il ne fonctionne pas comme vous le prévoyez mais vous pouvez le faire:
{% with articles=articles_list1 %}
{% include "list.html" %}
{% endwith %}
{% with articles=articles_list2 %}
{% include "list.html" %}
{% endwith %}
Toutefois, si list.html
fonctionne simplement comme un moyen de créer une liste, alors vous voudrez peut-être la changer en macro
à la place - cela vous donnera beaucoup plus de flexibilité.
{% macro build_list(articles) %}
<ul>
{% for art in articles %}
<li>{{art}}</li>
{% endfor %}
</ul>
{% endmacro %}
{# And you call it thusly #}
{{ build_list(articles_list1) }}
{{ build_list(articles_list2) }}
De cette façon, vous pouvez passer plusieurs variables à Jinja2 Inclure instruction en divisant les variables par une virgule à l'intérieur --- (Avec instruction):
{% with var_1=123, var_2="value 2", var_3=500 %}
{% include "your_template.html" %}
{% endwith %}