Django Cycle包含模板标签

时间:2019-09-23 18:57:02

标签: django django-templates

我想循环Django模板中的include标签,但是我无法嵌套循环include内。周期应该像

include cycle left_align.html right_align.html

我正试图避免创建自定义模板,只是为了保持简单。我想看看是否有人对此有任何建议:

{% for s in sections %}

<section class="{% cycle 'lighter-section' 'cover cover-bg-section' %}">
    {% if s.media.values %}

    {% include 'web_builder/apple-pie/sections/left_align.html' %}

    {% else %}

    {% include 'web_builder/apple-pie/sections/center_align.html' %}

    {% endif %}
</section>

{% endfor %}

1 个答案:

答案 0 :(得分:1)

不幸的是,无法使用cycle块将with templatetag的结果分配给变量,但是您可以使用as关键字将其结果转储到变量中并在任何地方使用希望例如{% cycle 'left_align.html' 'right_align.html' as include_file %}。但是,这有副作用。

该指令本身也会产生循环结果,尽管它也已注册在变量中。作为解决方法,您可以将其放置在某个HTML元素的data-属性中,以便使其不显示,并稍后在include标签内的完整模板路径串联中使用该变量。

完整示例:

  {% for i in "xxxxxxxxxxxxxxxxx" %}
    <section data-include-file="{% cycle 'left_align.html' 'right_align.html' as include_file %}">
    {% include 'web_builder/apple-pie/sections/'|add:include_file %}
    </section>
  {% endfor %}

但是,由于它看起来丑陋且复杂,因此我也考虑为其编写自定义包含标签。