Django - 在模板中将列表排序为三列

3 投票
3 回答
2078 浏览
提问于 2025-04-16 17:38

我的模型:

Item:
    name
    desc
    order
    created_at

我从Item那里得到了一个物品列表,像这样:

items = Item.objects.all().order_by('order', '-created_at')

现在我把这个列表发送到模板中。但是我需要按照一定的模式对它进行排序。例如:

<ul>
    <li>item 1</li>
    <li>item 2</li>
    <li>item 3</li>
</ul>
<ul>
    <li>item 4</li>
    <li>item 5</li>
    <li>item 6</li>
</ul>
<ul>
    <li>item 7</li>
</ul>

还有更少的物品:

<ul>
    <li>item 1</li>
    <li>item 2</li>
</ul>
<ul>
    <li>item 3</li>
    <li>item 4</li>
</ul>
<ul>
    <li>item 5</li>
</ul>

或者缩短:

<ul>
    <li>item 1</li>
</ul>
<ul>
    <li>item 2</li>
</ul>
<ul>
    <li>item 3</li>
</ul>

有什么想法吗?谢谢你的帮助!

更新:添加了一些反思

<ul>
    <li>item 1</li>
    <li>item 2</li>
</ul>
<ul>
    <li>item 3</li>
</ul>
<ul>
    <li></li>
</ul>

或者

<ul>
    <li>item 1</li>
    <li>item 2</li>
    <li>item 3</li>
</ul>
<ul>
    <li>item 4</li>
</ul>
<ul>
    <li>item 5</li>
</ul>

或者

<ul>
    <li>item 1</li>
    <li>item 2</li>
    <li>item 3</li>
    <li>item 4</li>
</ul>
<ul>
    <li>item 5</li>
    <li>item 6</li>
</ul>
<ul>
    <li>item 7</li>
</ul>

3 个回答

0

我不太明白你们分组的标准是什么,是不是只是每3个一组循环?如果是这样的话,我觉得你可以用循环模板标签来解决这个问题:

http://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#cycle

2

我昨天做了这个。

{% for link in footer_links %}
    {% if forloop.first or forloop.counter0|divisibleby:"6" %}
    <ul>
    {% endif %}
        <li><a href='{{ link.href }}'>{{ link.title }}</a></li>
    {% if forloop.last or forloop.counter|divisibleby:"6" %}
    </ul>
    {% endif %}
{% endfor %}

虽然它没有完全做到三列,但它把链接分成了长度为6的列表。

2

你有没有查看过关于分割列表的各种代码片段

撰写回答