在网站运营中,精心设计的页面布局和内容展示,能够显著提升用户体验和内容的可读性。尤其在列表内容较多的场景下,如果所有条目都以相同样式呈现,容易造成视觉疲劳。这时候,隔行变色或按特定数量分组输出,就能很好地解决这些问题。安企CMS(AnQiCMS)的模板引擎,凭借其灵活的Django模板语法,提供了强大的过滤器功能,其中divisibleby过滤器便是实现这类需求的一个利器。

这篇文章将深入探讨如何巧妙运用安企CMS模板中的divisibleby过滤器,在循环中实现列表的隔行变色或按N个元素进行分组输出。


理解 divisibleby 过滤器

安企CMS的模板引擎支持类似Django的语法,其中包含了许多实用的过滤器(filters)。divisibleby过滤器顾名思义,是用来判断一个数字是否能够被另一个数字整除的。它的返回值是一个布尔值(True或False),这使得它成为在循环中实现条件判断的理想工具。

它的基本用法非常直观:

{{ 某个数字 | divisibleby: 另一个数字 }}

例如,{{ 21 | divisibleby:3 }} 将返回 True,因为21可以被3整除。而 {{ 22 | divisibleby:3 }} 则会返回 False

在模板的循环中,我们经常会用到forloop.Counter这个特殊变量。它代表当前循环的索引,从1开始计数。结合forloop.Counterdivisibleby,我们就能轻松地控制列表元素的显示逻辑。

实现列表隔行变色

隔行变色是提升列表可读性最常见的方法之一。它通过为列表中的奇数行和偶数行应用不同的背景色,让用户更容易区分和阅读每一条内容。

操作思路

要实现隔行变色,我们需要判断当前循环的索引是奇数还是偶数。当forloop.Counter能够被2整除时,表示当前是偶数行;反之,则是奇数行。

示例代码

假设我们有一个文档列表,我们想让它隔行显示不同的背景色。

首先,在您的CSS样式文件中定义两个类,比如odd-roweven-row

/* public/static/css/style.css 或您的自定义CSS文件 */
.article-list li {
    padding: 10px;
    margin-bottom: 5px;
}
.odd-row {
    background-color: #f9f9f9; /* 浅灰色背景 */
}
.even-row {
    background-color: #e0e0e0; /* 稍深一点的灰色背景 */
}

接着,在安企CMS的模板文件(例如archive/list.html)中,使用divisibleby过滤器为列表项动态添加样式类:

<ul class="article-list">
    {% archiveList archives with type="page" limit="10" %}
        {% for item in archives %}
            <li class="{% if forloop.Counter|divisibleby:2 %}even-row{% else %}odd-row{% endif %}">
                <!-- 这里是您的文章内容 -->
                <h3><a href="{{ item.Link }}">{{ item.Title }}</a></h3>
                <p>{{ item.Description|truncatechars:100 }}</p>
                <span>发布日期:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
            </li>
        {% empty %}
            <li>暂无相关内容。</li>
        {% endfor %}
    {% endarchiveList %}
</ul>

在这个例子中,forloop.Counter|divisibleby:2会判断当前行是否为偶数行。如果是,就应用even-row类;否则,应用odd-row类。通过这种方式,我们轻松实现了列表的隔行变色效果。

小提示: 如果仅仅是实现简单的隔行变色,安企CMS模板还提供了更简洁的cycle标签。例如:

<li class="{% cycle 'odd-row' 'even-row' %}">
    <!-- 内容 -->
</li>

然而,`divisibleby