如何在模板中根据条件逻辑(if/else)动态控制内容的显示?

在 AnQiCMS 的模板设计中,能够根据不同的条件灵活地控制内容的显示,是实现网站个性化和动态化展示的关键。无论是根据文章是否有缩略图来决定是否展示图片,还是依据用户角色来显示特定内容,条件逻辑都能提供强大的支持。AnQiCMS 采用类似 Django 模板引擎的语法,这使得熟悉网页开发的站长们可以非常容易上手。

掌握 AnQiCMS 模板中的条件逻辑基础

AnQiCMS 模板中的条件逻辑主要通过 {% if ... %} 标签来实现。这个标签的作用是判断一个条件表达式是否为真(True),如果条件为真,则执行 if 标签内部的代码块;如果为假(False),则跳过。所有条件逻辑的标签都需要成对出现,以 {% endif %} 结束,以确保模板结构的完整性。

例如,您可能希望只在某个变量(比如一篇文章的标题)存在时才显示它,可以这样写:

{% if article.Title %}
    <h1>{{ article.Title }}</h1>
{% endif %}

这里,article.Title 是从后端获取的一个变量,如果它有值,标题就会被渲染出来。

深入了解条件逻辑的进阶用法

AnQiCMS 模板的条件逻辑远不止简单的 if 判断,它还支持更复杂的逻辑分支和多种运算符,让内容控制更加精细。

  1. 多分支判断:elseelif 当您的逻辑需要处理“如果…那么…否则…”或“如果…那么…否则如果…那么…否则…”的场景时,elseelif(else if 的缩写)就派上用场了。

    • else:当 if 条件不满足时执行的默认代码块。
    • elif:在 if 之后,else 之前,可以添加多个 elif 来检查其他条件。

    比如,您想根据文章是否有缩略图来展示图片,如果没有,就显示一段提示文字:

    {% if item.Thumb %}
        <img src="{{ item.Thumb }}" alt="{{ item.Title }}" />
    {% else %}
        <p>暂无图片</p>
    {% endif %}
    

    再比如,根据用户ID展示不同欢迎语:

    {% if user.Id == 1 %}
        <p>欢迎管理员!</p>
    {% elif user.Id > 0 %}
        <p>欢迎普通用户!</p>
    {% else %}
        <p>请登录!</p>
    {% endif %}
    
  2. 比较运算符 在条件表达式中,您可以使用常见的比较运算符来对比值:

    • == (等于)
    • != (不等于)
    • > (大于)
    • < (小于)
    • >= (大于等于)
    • <= (小于等于)

    这些运算符可以用于比较数字、字符串,甚至是布尔值。

  3. 逻辑运算符 为了构建更复杂的条件,您可以使用逻辑运算符来组合多个条件:

    • and&& (逻辑与):当所有条件都为真时,整个表达式才为真。
    • or|| (逻辑或):当至少一个条件为真时,整个表达式就为真。
    • not! (逻辑非):反转条件的布尔值。

    例如,当一篇文章既有标题又有内容时才显示:

    {% if article.Title and article.Content %}
        <h1>{{ article.Title }}</h1>
        <p>{{ article.Content }}</p>
    {% endif %}
    

    或者,当一个分类有子分类或者没有文档时,显示不同的链接:

    {% if item.HasChildren or item.ArchiveCount == 0 %}
        <a href="{{ item.Link }}">{{ item.Title }}(待补充)</a>
    {% else %}
        <a href="{{ item.Link }}">{{ item.Title }}</a>
    {% endif %}
    
  4. in 运算符 in 运算符可以用来判断一个值是否存在于一个列表、字符串或映射(map)中。这在处理标签、多选属性等场景时非常实用。您也可以结合 filter-contain 过滤器来实现类似的功能。

    假设您有一个文章的 Flag 属性(例如Flag="h"表示头条),想判断它是否是幻灯片 (f) 或推荐 (c):

    {% if "f" in item.Flag or "c" in item.Flag %}
        <span class="badge">推荐</span>
    {% endif %}
    

    或者,如果您有一个包含多个关键词的字符串,并想检查某个词是否在其中:

    {% set keywords_str = "SEO,网站优化,内容营销" %}
    {% if "SEO" in keywords_str %}
        <p>包含SEO关键词</p>
    {% endif %}
    

实际应用中的常见场景

了解了这些基础和进阶用法后,让我们看看在 AnQiCMS 模板中,条件逻辑如何在实际场景中发挥作用:

  1. 控制导航菜单的激活状态 在制作导航菜单时,您通常会希望当前访问的页面在菜单中高亮显示。navList 标签返回的 item 对象中包含 IsCurrent 字段,可以很方便地实现这一点:

    {% navList navs %}
        {% for item in navs %}
            <li class="{% if item.IsCurrent %}active{% endif %}">
                <a href="{{ item.Link }}">{{ item.Title }}</a>
            </li>
        {% endfor %}
    {% endnavList %}
    
  2. 处理循环中的第一个/最后一个元素for 循环中,您可以访问 forloop 变量来获取当前循环的状态。例如,forloop.Counter 可以获取当前循环的索引(从1开始),这对于给第一个元素添加特殊样式非常有用:

    {% archiveList archives with type="list" limit="10" %}
        {% for item in archives %}
            <div class="article-item {% if forloop.Counter == 1 %}featured{% endif %}">
                <!-- 文章内容 -->
            </div>
        {% endfor %}
    {% endarchiveList %}
    
  3. 根据字段内容动态展示 很多时候,某些内容字段可能为空,您不希望它们在前端显示。

    • 文章描述:如果 Description 为空,不显示其包裹的 div
      
      {% if item.Description %}
          <div>{{ item.Description }}</div>
      {% endif %}
      
    • 自定义字段:如果您在后台模型中自定义了 author 字段,只有当 archive.author 有值时才显示作者信息。
      
      {% archiveDetail archiveAuthor with name="author" %}
      {% if archiveAuthor %}
          <p>作者:{{ archiveAuthor }}</p>
      {% endif %}
      
  4. 展示联系方式或社交媒体链接 通过 contact 标签获取的联系方式,您可以判断特定社交媒体链接是否存在再显示对应的图标或链接,避免显示空白内容:

    {% contact contactFacebook with name="Facebook" %}
    {% if contactFacebook %}
        <a href="{{ contactFacebook }}" target="_blank">Facebook</a>
    {% endif %}
    

优化模板代码:移除多余空行

在编写条件逻辑时,尤其是当 if 语句不包含任何可渲染的内容,仅仅是控制其他标签的显示时,可能会在渲染的 HTML 中产生多余的空行,影响页面的结构或调试。AnQiCMS 模板提供了一种简洁的方式来移除这些由逻辑标签(如 iffor)产生的空行,即在标签的起始或结束符号内添加一个短划线 -

例如:

{%- if some_condition -%}
    <p>这段内容会在满足条件时显示</p>
{%- endif -%}

在这个例子中,即使 some_condition 为假,模板引擎也不会在 HTML 输出中留下由 {% if ... %} 标签引入的任何空行。这对于保持生成的 HTML 代码整洁非常有用。

总结

AnQiCMS 模板中的条件逻辑是构建动态、灵活网站的强大工具。通过熟练运用 ifelseelif 结合各种比较和逻辑运算符,您可以精确地控制页面上每一个元素的显示,从而极大地提升用户体验和