在网站内容运营中,我们经常需要根据不同的情况来展示或隐藏特定的内容,例如在某个节假日展示特别活动信息,或者根据用户的状态显示不同的操作按钮。AnQiCMS 提供了灵活的模板引擎,让你能够轻松实现这些动态化的内容控制,其中最核心的工具就是条件判断语句——if。
AnQiCMS 的模板语法类似于流行的 Django 模板引擎,上手非常简单。通过运用 if 语句,你可以在模板中根据各种条件来决定哪些内容应该被用户看到,哪些则不显示,从而为网站访客提供更精准、个性化的浏览体验。
掌握 if 语句的基础结构
在 AnQiCMS 模板中,if 语句的基本结构与我们熟悉的编程语言类似,它总是以 {% if 条件 %} 开始,并以 {% endif %} 结束。
1. 最简单的条件判断:{% if 条件 %} ... {% endif %}
当你只需要在特定条件为真(True)时显示内容时,可以使用这种形式:
{% if system.SiteCloseTips %}
<div class="site-alert">
网站维护中,请稍后再访问:{{ system.SiteCloseTips }}
</div>
{% endif %}
在这个例子中,如果后台设置了 SiteCloseTips(网站关闭提示内容),这段提示信息就会显示。如果 SiteCloseTips 为空或未设置,内容块则完全不显示。
2. 包含替代方案:{% if 条件 %} ... {% else %} ... {% endif %}
当你希望在条件为真时显示一段内容,而在条件不为真时显示另一段内容时,else 语句就派上用场了:
{% if user.IsLoggedIn %}
<p>您好,{{ user.UserName }}!欢迎回来。</p>
{% else %}
<p>您尚未登录,请<a href="/login">登录</a>或<a href="/register">注册</a>。</p>
{% endif %}
这里根据用户是否登录,显示不同的欢迎语或引导。
3. 多重条件判断:{% if 条件1 %} ... {% elif 条件2 %} ... {% else %} ... {% endif %}
面对更复杂的逻辑,可能需要检查多个不同的条件。elif(else if 的缩写)允许你链式地添加更多的条件:
{% if archive.ReadLevel > 5 %}
<div class="vip-exclusive">
此内容为高级会员专属,请升级您的会员等级。
</div>
{% elif archive.ReadLevel > 0 %}
<div class="member-only">
此内容需登录后查看。
</div>
{% else %}
<div class="free-content">
免费内容,欢迎阅读!
</div>
{% endif %}
这个示例根据文档的阅读等级,为不同用户展示不同的提示信息。
灵活运用各种条件判断表达式
if 语句中的“条件”可以是多种多样的,它可以是变量的值、变量之间比较的结果,甚至是更复杂的逻辑组合。
相等与不等判断:
==和!=你可以检查一个变量的值是否等于(==)或不等于(!=)另一个值。{% if archive.CategoryId == 10 %} <p>这是关于“最新资讯”分类的文章。</p> {% endif %} {% if system.Language != "zh-CN" %} <p>This content is not in Simplified Chinese.</p> {% endif %}大小比较:
>,<,>=,<=常用于比较数字大小,例如判断库存量、价格或阅读量。{% if product.Stock <= 0 %} <span class="sold-out">已售罄</span> {% elif product.Stock < 5 %} <span class="low-stock">仅剩少量,欲购从速!</span> {% else %} <span class="in-stock">有货</span> {% endif %}逻辑组合:
and,or,not你可以使用and(且)、or(或)以及not(非)来构建更复杂的逻辑。{% if user.IsLoggedIn and user.IsAdmin %} <a href="/system/">进入后台管理</a> {% endif %} {% if archive.Flag contains "h" or archive.Flag contains "f" %} <span class="hot-feature">热门推荐/幻灯片内容</span> {% endif %} {% if not archive.Thumb %} <p>此文章暂无缩略图。</p> {% endif %}值得一提的是,
archive.Flag contains "h"这种用法可以用来检查文档的推荐属性中是否包含特定的标记(如h代表头条)。检查变量是否存在或为“真”值 在 AnQiCMS 模板中,以下情况会被视为“假”(False):
nil(空值)false(布尔假)- 数字
0 - 空字符串
"" - 空的数组(slice)或键值对(map) 除此以外的大多数情况都会被视为“真”(True)。这让你可以简洁地判断变量是否有实际内容。
{% if item.Thumb %} <img src="{{ item.Thumb }}" alt="{{ item.Title }}"> {% else %} <img src="/static/images/default_thumb.png" alt="无图"> {% endif %} {% if archive.Description %} <p class="description">{{ archive.Description }}</p> {% endif %}这段代码会检查
item.Thumb是否有值(即图片路径是否存在),以及archive.Description是否有内容,从而决定是否显示相应的图片或描述。检查集合成员:
in如果你需要判断一个值是否存在于一个列表或字符串中,可以使用in操作符。{% set allowed_users = ["admin", "editor", "moderator"] %} {% if user.UserName in allowed_users %} <p>欢迎内容管理团队成员!</p> {% endif %}
编写整洁模板的小技巧
在使用 if 语句时,有几个小技巧可以让你的模板代码更整洁、易读:
- 控制空白字符: 有时,`