AnQiCMS 的模板系统以其灵活和高效著称,它借鉴了 Django 模板引擎的语法风格,让内容呈现和逻辑控制变得直观。在模板开发中,我们经常需要根据不同的条件来显示或隐藏内容,这时,掌握条件判断的各种用法就显得尤为重要。今天,我们就来聊聊如何在 AnQiCMS 模板中巧妙运用 not 操作符来反转条件判断,让你的页面逻辑更加清晰和灵活。
什么是 not 操作符?
在任何编程语言中,not 操作符都扮演着“非”的角色,它的作用非常简单:将一个布尔表达式(真或假)的结果进行反转。如果一个条件原本为真(True),经过 not 处理后就会变成假(False);反之,如果条件为假,就会变成真。
在 AnQiCMS 模板中,not 主要用于 {% if %} 标签内部,帮助我们构建反向的逻辑判断。这在很多场景下能让代码意图更明确,或者解决一些直接判断较复杂的逻辑问题。
基本用法
not 操作符的基本语法非常直观:
{% if not 你的条件 %}
<!-- 当“你的条件”为假时,这里的内容会显示 -->
{% endif %}
或者,如果你想在条件为真时执行另一段代码,可以结合 else:
{% if not 你的条件 %}
<!-- 当“你的条件”为假时,这里的内容会显示 -->
{% else %}
<!-- 当“你的条件”为真时,这里的内容会显示 -->
{% endif %}
接下来,我们通过几个 AnQiCMS 模板中的实际场景来具体看看 not 能带来哪些便利。
实用场景与示例
1. 显示备用内容或占位符
设想一下,你的文章可能并非都有缩略图。当 archive.Thumb (文档缩略图)不存在或为空时,你希望显示一张默认图片作为占位符,而不是让页面留白。
<a href="{{ archive.Link }}">
{% if not archive.Thumb %}
<img src="/public/static/images/default-thumbnail.webp" alt="默认缩略图">
{% else %}
<img src="{{ archive.Thumb }}" alt="{{ archive.Title }}">
{% endif %}
<h3>{{ archive.Title }}</h3>
</a>
在这里,{% if not archive.Thumb %} 会检查 archive.Thumb 是否有值。如果没有(即为空或不存在),条件为真,就会显示默认缩略图。如果有,条件为假,则显示文章本身的缩略图。
2. 处理非活动状态或排除特定项
在导航菜单或列表展示中,你可能希望对“非当前”的页面或某些特定项进行不同的处理。
例如,在一个分类列表循环中,你希望突出显示所有 不 是当前选中分类的链接:
{% categoryList categories with moduleId="1" parentId="0" %}
<ul>
{% for item in categories %}
<li {% if not item.IsCurrent %}class="inactive-category"{% endif %}>
<a href="{{ item.Link }}">{{ item.Title }}</a>
</li>
{% endfor %}
</ul>
{% endcategoryList %}
这里,item.IsCurrent 是一个布尔值,表示当前循环的分类是否是用户正在浏览的分类。{% if not item.IsCurrent %} 就判断了“如果这不是当前分类”,然后给它添加一个 inactive-category 的 CSS 类。
再比如,你有一个文档列表,但想排除掉 ID 为 10 的那篇特殊文档:
{% archiveList archives with type="list" limit="10" %}
<ul>
{% for item in archives %}
{% if not item.Id == 10 %}
<li><a href="{{ item.Link }}">{{ item.Title }}</a></li>
{% endif %}
{% endfor %}
</ul>
{% endarchiveList %}
通过 {% if not item.Id == 10 %},我们只渲染那些 ID 不等于 10 的文章项。
3. 网站状态的精细控制
AnQiCMS 支持网站闭站功能,当网站处于闭站状态时,通常会显示一个闭站提示。你可以利用 not 来控制何时显示正常内容:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>{% tdk with name="Title" siteName=true %}</title>
</head>
<body>
{% if system.SiteCloseTips %}
<!-- 如果网站处于闭站状态,显示闭站提示 -->
<div class="site-closed-banner">
<p>{{ system.SiteCloseTips }}</p>
</div>
{% else %}
<!-- 如果网站未闭站,则显示正常网站内容 -->
<header>...</header>
<main>
<h1>欢迎访问我们的网站!</h1>
<!-- 其他正常页面内容 -->
</main>
<footer>...</footer>
{% endif %}
</body>
</html>
虽然这里我们使用了 {% if system.SiteCloseTips %} 来直接判断闭站提示是否存在,但另一种思路是,如果 system.SiteCloseTips 变量不存在(即网站未闭站),就显示正常内容,这也可以通过 not 来实现:
{% if not system.SiteCloseTips %}
<!-- 网站未闭站,显示正常内容 -->
<header>...</header>
<main>...</main>
<footer>...</footer>
{% else %}
<!-- 网站已闭站,显示闭站提示 -->
<div class="site-closed-banner">
<p>{{ system.SiteCloseTips }}</p>
</div>
{% endif %}
这种写法也同样有效,可以根据个人偏好或团队规范选择。
结合 and, or 运算符
not 操作符也可以与其他逻辑运算符 and、or 结合使用,构建更复杂的条件判断。例如:
{% if not (item.IsFeatured and item.Category == "News") %}
<!-- 如果文章不是“特色”且“新闻”类别,则显示此内容 -->
{% endif %}
这里 not (item.IsFeatured and item.Category == "News") 意味着:如果文章 不 是特色文章 或 不 属于新闻类别,条件就会成立。
小贴士:减少模板空行
在 AnQiCMS 模板中,像 {% if %} 这样的逻辑标签有时会在渲染时产生多余的空行,影响 HTML 结构的美观性。为了避免这种情况,你可以在标签的开始和/或结束处使用 - 符号,如下所示:
{%- if not archive.Thumb %}
<img src="/public/static/images/default-thumbnail.webp" alt="默认缩略图">
{%- else %}
<img src="{{ archive.Thumb }}" alt="{{ archive.Title }}">
{%- endif %}
在 {%- if 和 {%- else 之后以及 {%- endif %} 之前添加 -,可以有效地移除这些标签所在的行及其旁边的空白字符,让最终输出的 HTML 更加紧凑。
总结
not 操作符是 AnQiCMS 模板中一个简单却强大的工具,它能帮助我们以反向思维处理条件判断,使得模板逻辑更加灵活和易读。无论是显示备用内容、排除特定项,还是控制页面元素的可见性,not 都能发挥其独特的作用。掌握好它的运用,将