Django模板和拆分变量列表
在django视图中,我传递了一个包含多个项目的列表 我的html设计如下:Django模板和拆分变量列表,django,django-templates,Django,Django Templates,在django视图中,我传递了一个包含多个项目的列表 我的html设计如下: <ul> <li> <div>1st item</div> <div>2nd item</div> </li> <li> <div>3th item</div> <div>4th item</div> </li> <li&g
<ul>
<li>
<div>1st item</div>
<div>2nd item</div>
</li>
<li>
<div>3th item</div>
<div>4th item</div>
</li>
<li>
<div>5th item</div>
<div>6th item</div>
</li>
</ul>
-
第一项
第二项
-
第3项
第4项
-
第5项
第6项
您可以看到模式,每两个项目,我需要将它们拆分并放入一个新的
。如何使用{%for item in my_list%}
循环并将这些变量除以每两个?您可以尝试这样的方法,它不是特别优雅,也没有经过任何测试
{% if list_of_items %}
<ul>
<li>
{% for item in list_of_items %}
<div>{{ item }}</div>
{% cycle '' '</li><li>' %}
{% endfor %}
</li>
</ul>
{% endif %}
{%if\u项列表%}
-
{u个项目的列表中项目的百分比%}
{{item}}
{%cycle'
- '%}
{%endfor%}
{%endif%}
您可以首先在视图中重新排列列表,使其成为列表列表列表,或者您也可以编写自己的批处理筛选器
据我所知,没有一种真正简单的django模板方法可以实现您想要的功能-django模板故意限制您编写python代码。如果项目具有一些属性,可以将它们自然分组成对,您可以使用
重新分组
:
{% if list_of_items %}
<ul>
{% regroup list_of_items by property as item_chunks %}
{% for chunk in item_chunks %}
<li>
{% for item in chunk.list %}
{{ item }}
{% endfor %}
</li>
{% endfor %}
</ul>
{% endif %}
{%if\u项列表%}
{%按属性将\u项的列表\u重新组合为项目\u块%}
{项_chunks%}中的块的%
-
{chunk.list%中的项的%s}
{{item}}
{%endfor%}
{%endfor%}
{%endif%}
这比Nick的解决方案多了几行,但如果这些元素确实具有自然连接它们的属性,我会说这是一个更优雅的解决方案。您可能希望以2大小的批次枚举6个元素的总列表,这将为您提供3个批次,然后循环每个批次 为此,可以在templatetags目录中添加自定义批处理筛选器。以下是添加自定义标记/过滤器的文档。 您的自定义过滤器可以是这样的
@register.filter
def batch(iterable, n=1):
l = len(iterable)
for ndx in range(0, l, n):
yield iterable[ndx:min(ndx + n, l)]
在html中
{% for batch in yourlist|batch:2%}
<li>
{% for element in batch %}
<div>{{element}}</div>
{% endfor %}
</li>
{% endfor %}
{%用于列表中的批次|批次:2%}
{对于批处理%中的元素,}
{{element}}
{%endfor%}
{%endfor%}
为Django 3.1更新此答案
{% block content %}
<div class="row">
{% for product in products %}
<div class="col-md-auto">
<h5>{{ product.name }}</h5>
</div>
{% if forloop.counter|divisibleby:"6" %}
</div>
<div class="row">
{% endif %}
{% endfor %}
</div>
{% endblock content %}
{%block content%}
{products%中产品的%s}
{{product.name}
{%if-forloop.counter |可除数为:“6”}
{%endif%}
{%endfor%}
{%endblock内容%}