术语重叠使得搜索难以找到答案。
我正在寻找有关实现QuerySet的多列显示的最佳方法的建议,该列在X列上从上到下填充每列。这意味着每列中的项数等于QuerySet计数除以X(列数)。
使用Offset对此不起作用,因为我希望我的数据增长到4列而不手动更新偏移量。 CSS浮动可视化,但数据不按顺序排列。
答案 0 :(得分:5)
这样的东西应该适合你,将列数作为columns
传递给模板:
{% for item in items %}
{% if forloop.first %}<div style="float:left;">{% endif %}
{{ item }}
{% if forloop.counter|divisibleby:columns %}
</div><div style="float:left">
{% endif %}
{% if forloop.last %}</div>{% endif %}
{% endfor %}
<div style="clear:both;"></div>
答案 1 :(得分:1)
似乎lazerscience的答案是正确的 - 但我认为OP希望数据按字母顺序对列中的数据进行排序,然后从下一列的顶部开始。使用divisibleby:可以在“X”项之后打破这一行,但我认为它需要一个更复杂的模板才能完成OP想要的操作。
不确定是否可能,但在视图中你可以:获取项目数,除以'列'并在Divisibleby中使用#进入下一个DIV列(视觉流将是CSS)
正如Lazers的例子现在,您正在构建Rows然后将其分成列,将排序顺序保持为然后向下。
对不起,如果我错过了什么。
-K
答案 2 :(得分:0)
你最好去使用jQuery插件从列表中创建一些列 Columnizer对我很有效
答案 3 :(得分:0)
以下是一些将列表拆分为多个子列表的django模板过滤器:
list partition template filters at djangosnippets.org
您可以在django模板中使用这些来将长列表拆分为多个列,如下所示:
{% load list_tags %}
<h2>Some List</h2>
{% for sub_list in full_list|rows:"3" %}
<ul>
{% for item in sub_list %}
<li>
{{item.name}}
</li>
{% endfor %}
</ul>
{% endfor %}
我在项目中将模板过滤器包含在名为list_tags.py的文件中。根据需要调整{% load %}
标记。