如何在 AnQiCMS 模板的 `for` 循环中,根据特定条件跳过某些项的显示?

📅 👁️ 80

在 AnQiCMS 的模板开发中,我们常常需要展示一系列内容,例如文章列表、产品列表或导航菜单。但很多时候,我们并不希望将所有数据都一股脑地显示出来,而是希望能根据某些特定条件,巧妙地跳过其中一部分,让最终展示的内容更加精准和符合用户需求。AnQiCMS 采用类似 Django 模板引擎的语法,这为我们实现这种条件性跳过提供了强大而灵活的工具。

要实现在 for 循环中根据特定条件跳过某些项的显示,最核心的工具就是 if 逻辑判断标签。通过将需要有条件显示的 HTML 片段包裹在 if 标签中,我们可以轻松地控制每一项内容的可见性。

核心机制:if 逻辑判断标签

想象一下,你正在遍历一个文章列表,并希望只显示那些不被标记为“推荐”的文章。这时,你就可以利用 {% if ... %} 结构。AnQiCMS 的 archiveList 标签获取的每篇文章(或其他模型内容)通常会有一个 Flag 字段,用于标记其推荐属性,例如 c 代表推荐。如果某个 item(循环中的当前项)的 Flag 字段不等于 c,我们才让它显示:

{% archiveList archives with type="list" limit="10" showFlag=true %}
    {% for item in archives %}
        {% if item.Flag != "c" %}
            <li class="article-item">
                <a href="{{ item.Link }}">
                    <h3>{{ item.Title }}</h3>
                    <p>{{ item.Description }}</p>
                </a>
            </li>
        {% endif %}
    {% endfor %}
{% endarchiveList %}

在上面的例子中,{% if item.Flag != "c" %} 这行代码起到了关键作用。它检查当前 itemFlag 是否不等于 "c"。如果条件为真,那么 <li> 标签及其内部的内容就会被渲染;如果条件为假(即 Flag 等于 "c"),则整个 <li> 及其内容都会被跳过,不会出现在最终的页面上。

除了 !=(不等于),你还可以使用其他比较操作符:

  • == (等于)
  • > (大于)
  • < (小于)
  • >= (大于等于)
  • <= (小于等于)
  • and (逻辑与)
  • or (逻辑或)
  • not (逻辑非)
  • in (包含)

这些操作符可以让你构建出非常复杂的条件。

结合内容属性与自定义字段

AnQiCMS 的灵活性在于其强大的内容模型和自定义字段功能。这意味着你可以根据文章、产品或单页面的任何内置属性或自定义字段来设置跳过条件。

例如,如果你希望跳过那些没有设置缩略图的文章,可以这样做:

{% archiveList archives with type="list" limit="10" %}
    {% for item in archives %}
        {% if item.Thumb %} {# 如果 item.Thumb 存在且不为空,则为 True #}
            <li class="article-with-thumb">
                <a href="{{ item.Link }}">
                    <img src="{{ item.Thumb }}" alt="{{ item.Title }}">
                    <h3>{{ item.Title }}</h3>
                </a>
            </li>
        {% endif %}
    {% endfor %}
{% endarchiveList %}

这里,{% if item.Thumb %} 会检查 item.Thumb 字段是否有值。如果有,就显示该项;如果没有,就跳过。反之,如果你想只显示那些没有缩略图的文章,你可以使用 {% if not item.Thumb %}

对于自定义字段,假设你在文章模型中添加了一个名为 EditorRecommend 的布尔类型字段,用于标记编辑特别推荐的文章。那么,你可以这样显示所有非编辑推荐的文章:

{% archiveList archives with type="list" moduleId="1" limit="10" %}
    {% for item in archives %}
        {% if not item.EditorRecommend %} {# 假设 EditorRecommend 是一个布尔值 #}
            <li class="normal-article">
                <h3><a href="{{ item.Link }}">{{ item.Title }}</a></h3>
                <p>{{ item.Description }}</p>
            </li>
        {% endif %}
    {% endfor %}
{% endarchiveList %}

更灵活的筛选:利用过滤器

AnQiCMS 模板引擎还支持多种过滤器,这些过滤器可以在条件判断中提供更高级的逻辑。例如,contain 过滤器可以判断一个字符串是否包含某个子字符串,这在需要根据关键词进行跳过时非常有用。

假设你有一个单页面列表,但你不想在主导航中显示任何标题包含“隐私政策”的页面:

{% pageList pages %}
    {% for item in pages %}
        {% if not item.Title|contain:"隐私政策" %}
            <li><a href="{{ item.Link }}">{{ item.Title }}</a></li>
        {% endif %}
    {% endfor %}
{% endpageList %}

这里,item.Title|contain:"隐私政策" 会检查当前页面的标题是否包含“隐私政策”这个关键词。如果包含,not 操作符会使其变为 false,从而跳过该项。

另一个例子是使用 length 过滤器来判断内容的长度。比如,你只想显示那些简介(Description)超过 50 个字符的文章:

{% archiveList archives with type="list" limit="10" %}
    {% for item in archives %}
        {% if item.Description|length > 50 %}
            <li class="detailed-description-article">
                <h3><a href="{{ item.Link }}">{{ item.Title }}</a></h3>
                <p>{{ item.Description }}</p>
            </li>
        {% endif %}
    {% endfor %}
{% endarchiveList %}

实践案例:常见的跳过场景

让我们再看几个常见的应用场景:

  1. 隐藏特定 ID 的导航项: 如果你有一个导航菜单,其中某个 ID 为 5 的导航项是临时的或不希望在当前模板中显示:

    {% navList navs %}
        {% for item in navs %}
            {% if item.Id != 5 %}
                <li><a href="{{ item.Link }}">{{ item.Title }}</a></li>
            {% endif %}
        {% endfor %}
    {% endnavList %}
    
  2. 跳过没有子分类的父分类: 在显示分类列表时,有时我们只希望显示那些包含子分类的分类项,或者反过来,只显示叶子分类: “`twig {% categoryList categories with moduleId=“1” parentId=“0” %}

    {% for item in categories %}
        {% if item.HasChildren %} {# 只显示有子分类的项 #}
            <li><a href="{{ item.Link }}">{{ item.
    

相关文章

`cycle` 标签在 AnQiCMS 模板中如何实现循环交替显示不同的样式或数据?

AnQiCMS 在模板开发中提供了许多实用的标签,让内容展示更加灵活高效。其中,`cycle` 标签就是这样一个巧妙的工具,它能帮助我们在循环中实现数据或样式的交替显示,从而让页面内容更具动态性和视觉吸引力。 ### 认识 `cycle` 标签:循环中的序列控制器 在网页设计中,我们经常会遇到需要对重复出现的元素应用不同样式,或者以特定顺序展示不同类型数据的情况。例如

2025-11-09

AnQiCMS 模板中 `for` 循环如何判断当前遍历项是否为循环中的第一项或最后一项?

在 AnQiCMS 的模板开发中,我们经常会遇到需要列表循环展示数据的情况,比如文章列表、产品分类、导航菜单等。在这些循环中,有时我们需要对列表的第一项或最后一项进行特殊处理,例如添加独特的 CSS 样式、显示不同的内容,或者巧妙地处理列表项之间的分隔符。AnQiCMS 采用了类似 Django 模板引擎的语法,为我们提供了非常直观且强大的工具来解决这类常见的模板逻辑问题。 ### 核心机制

2025-11-09

如何在 AnQiCMS 模板中检查文章内容是否包含特定关键词,并基于此进行条件显示?

在网站内容运营中,我们经常需要根据文章的实际内容,灵活地调整页面的显示方式。例如,如果一篇文章提及了某个特定产品或活动,我们可能希望在页面上突出显示相关的购买链接或促销信息;如果文章内容涉及敏感话题,则可能需要添加额外的免责声明。这种基于文章内容进行条件显示的需求,在安企CMS(AnQiCMS)的模板中是完全可以实现的。 安企CMS采用类似Django的模板引擎语法

2025-11-09

`autoescape` 标签在 AnQiCMS 模板中如何控制 HTML 标签的自动转义功能?

在 AnQiCMS 的模板系统中,我们日常内容展示的核心,离不开对 HTML 标签的处理。为了确保网站的安全,AnQiCMS 默认会对模板中输出的变量进行 HTML 自动转义。这一机制有效防止了恶意代码的注入,例如常见的跨站脚本攻击(XSS)。然而,在某些场景下,我们可能需要显示包含 HTML 标签的富文本内容,这时就需要了解如何灵活地控制这种自动转义功能。 ### 自动转义

2025-11-09

AnQiCMS 模板如何判断自定义字段是否存在,并根据其值进行条件渲染?

在AnQiCMS模板开发中,灵活地展示内容是提升用户体验和网站专业度的关键。其中,对自定义字段进行判断并根据其值进行条件渲染,是实现这一目标不可或缺的技巧。通过这种方式,您可以确保页面内容的精确展示,避免显示空值,或根据特定数据动态调整页面布局和功能。 ### 理解AnQiCMS自定义字段及其在模板中的获取方式 AnQiCMS作为一款功能强大的内容管理系统

2025-11-09

`archiveDetail` 标签如何判断文档的 `Content` 字段是否为空,并显示替代内容?

在安企CMS中,如何优雅地处理文档内容为空的情况? 在网站运营过程中,我们经常会发布各种类型的文档,它们承载着重要的信息。然而,有时由于多种原因,比如内容还在草稿阶段、数据导入时发生遗漏,或者仅仅是某些文档天生就只有标题而无详细正文,我们可能会遇到文档的 `Content` 字段为空的情况。 如果模板在渲染这些文档详情页时没有做任何处理,用户可能会看到一个空白的页面区域,这不仅影响用户体验

2025-11-09

AnQiCMS 模板中如何安全地嵌入第三方统计或广告 JS 代码?

在网站运营中,我们常常需要借助第三方统计工具来分析访客行为,或者通过广告平台来获取收益。将这些第三方JavaScript(JS)代码安全、高效地嵌入到网站模板中,是每个网站运营者都需要掌握的技能。对于使用AnQiCMS的朋友们来说,了解其模板机制和内置功能,能帮助我们更稳妥地完成这项任务。 AnQiCMS作为一款基于Go语言开发的企业级内容管理系统,在设计之初就非常注重性能和安全性

2025-11-09

`languages` 标签在 AnQiCMS 多语言站点中,如何确保正确设置 `hreflang` 标签?

在全球化日益深入的今天,许多企业和内容运营者都需要为不同语言或地区的用户提供定制化的内容。为了确保这些多语言版本能够被搜索引擎正确识别并展示给目标用户,`hreflang` 标签的正确设置显得尤为重要。对于使用 AnQiCMS 搭建多语言站点的朋友来说,系统内置的 `languages` 标签正是解决这一问题的强大工具。 ### 理解 `hreflang` 标签的重要性 在深入了解

2025-11-09