How to pass selected, named arguments to Jinja2's include context?

北城余情 提交于 2020-01-11 15:26:14

问题


Using Django templating engine I can include another partial template while setting a custom context using named arguments, like this:

{% include "list.html" with articles=articles_list1 only %}
{% include "list.html" with articles=articles_list2 only %}

As you may be supposing, articles_list1 and articles_list2 are two different lists, but I can reuse the very same list.html template which will be using the articles variable.

I'm trying to achieve the same thing using Jinja2, but I can't see what's the recommended way, as the with keyword is not supported.


回答1:


For readers in 2017+, Jinja as of 2.9 includes the with statement by default. No extension necessary.

http://jinja.pocoo.org/docs/2.9/templates/#with-statement

In older versions of Jinja (before 2.9) it was required to enable this feature with an extension. It’s now enabled by default.




回答2:


Jinja2 has an extension that enables the with keyword - it won't give you the same syntax as Django, and it may not work the way you anticipate but you could do this:

{% with articles=articles_list1 %}
    {% include "list.html" %}
{% endwith %}
{% with articles=articles_list2 %}
    {% include "list.html" %}
{% endwith %}

However, if list.html is basically just functioning as a way to create a list then you might want to change it to a macro instead - this will give you much more flexibility.

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



回答3:


This way you can pass multiple variables to Jinja2 Include statement - (by splitting variables by comma inside With statement):

            {% with var_1=123, var_2="value 2", var_3=500 %}
                {% include "your_template.html" %}
            {% endwith %}


来源:https://stackoverflow.com/questions/9404990/how-to-pass-selected-named-arguments-to-jinja2s-include-context

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!