Django for循环有多大的灵活性?

Mat*_*Mat 3 django django-templates

我在模板中输出一系列Django对象:

{% for obj in list %}
    ...
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

但是我只想输出前五个,然后将其余部分分开<DIV>..想法是,我可以隐藏下半部分直到需要.

我设想这样的东西,但需要限制迭代的元素:

{% for obj in list %}
    ...
{% endfor %}

<a href="" onclick="unhide()">Show hidden</a>
<div id="hidden">
    {% for obj in list %}
        ...
    {% endfor %}
</div>
Run Code Online (Sandbox Code Playgroud)

是否可以单独在模板中执行此操作?它是表示逻辑,所以我宁愿不污染视图.

Pao*_*ino 16

你可以使用slice:

{% for obj in list|slice:":5" %}
    ...
{% endfor %}

<a href="" onclick="unhide()">Show hidden</a>
<div id="hidden">
    {% for obj in list|slice:"5:" %}
        ...
    {% endfor %}
</div>
Run Code Online (Sandbox Code Playgroud)


And*_*ker 7

如果你在视图中做了更多工作,那么在模板限制中苦苦挣扎往往表明生活可能会更简单:

context = {
  'visible_list': mylist[:5],
  'hidden_list': mylist[5:]
}
Run Code Online (Sandbox Code Playgroud)

我并不是说这有必要比上面的切片过滤器解决方案更好,但是通常值得考虑将模板传递给上下文对象,其中所有内容都设置得很好.如果逻辑在以后变得更复杂,它可以让您更容易适应.

表示逻辑在视图中非常好.我并不特别认为它是"污染".