【问题标题】:Django - Sort the list into 3 columns on templatesDjango - 将列表排序为模板上的 3 列
【发布时间】:2026-01-22 15:50:01
【问题描述】:

我的模特:

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>

【问题讨论】:

    标签: python django algorithm django-templates django-views


    【解决方案1】:

    【讨论】:

      【解决方案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)

      【讨论】:

        【解决方案3】:

        我不完全理解确定您的分组的标准 - 它真的只是循环通过 3 吗?如果是这样,我认为循环模板标签就是您要寻找的:

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

        【讨论】:

        • 右边总是小于或等于左边。我将添加一些思考。
        • 对不起,我还是不明白潜在的愿望——你能解释一下这些物品是如何分配的吗?