使用Django将数据分成多个显示列

时间:2010-10-03 21:49:46

标签: django django-queryset

术语重叠使得搜索难以找到答案。

我正在寻找有关实现QuerySet的多列显示的最佳方法的建议,该列在X列上从上到下填充每列。这意味着每列中的项数等于QuerySet计数除以X(列数)。

使用Offset对此不起作用,因为我希望我的数据增长到4列而不手动更新偏移量。 CSS浮动可视化,但数据不按顺序排列。

4 个答案:

答案 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 %}标记。