在 AnQiCMS 的模板开发中,我们经常需要根据数据的不同状态来展示不同的内容。例如,一个订单是“已支付”还是“未支付”,一个文章是“已发布”还是“草稿”。为了更简洁高效地处理这类布尔型数据到用户友好文本的转换,AnQiCMS 模板引擎提供了一个非常实用的工具——yesno 过滤器。

yesno 过滤器能够根据变量的布尔值(真、假)以及空值状态,智能地输出预设的文本内容,从而让您的模板逻辑更清晰,页面显示更人性化。它遵循 AnQiCMS 模板基于 Django 模板引擎语法的特点,易于学习和使用。

核心功能解析:判断变量的三种状态

yesno 过滤器的核心在于其“三态”判断能力:

  1. 真值 (True-like): 当变量被评估为真(例如,布尔值 true,非零数字,非空字符串等)。
  2. 假值 (False-like): 当变量被评估为假(例如,布尔值 false,零,空字符串等)。
  3. 空值 (Nil/Unknown): 当变量为 nil 或未定义时。

默认情况下,yesno 过滤器会为这三种状态分别输出 “yes”、”no” 和 “maybe”。这种设计考虑到了数据可能存在“未定”或“未知”状态,提供了更全面的反馈。

当然,在实际应用中,默认的 “yes/no/maybe” 可能不符合您的具体业务需求。yesno 过滤器允许您自定义这三种状态对应的文本,让输出更加贴合实际场景。

实际应用场景

设想一下,在一个内容管理系统中,您可能需要:

  • 显示文章发布状态: “已发布” 或 “草稿”。
  • 指示用户账户活跃性: “活跃” 或 “禁用”。
  • 展示某个功能开关: “开启” 或 “关闭”。
  • 检查某个数据字段是否存在: “有数据”、”暂无数据” 或 “未定义”。

在这些场景下,直接输出 truefalse 往往不够直观,而 yesno 过滤器正是解决这一问题的利器,它将技术性的布尔值转化为易于理解的业务描述。

如何使用 yesno 过滤器

yesno 过滤器的使用方式非常直观,您可以根据是否需要自定义输出文本来选择不同的语法。

  1. 基本语法(使用默认文本) 只需将变量通过管道符 | 连接到 yesno 过滤器即可。

    {{ 变量名 | yesno }}
    
    • 如果 变量名 为真,输出 “yes”。
    • 如果 变量名 为假,输出 “no”。
    • 如果 变量名 为空(nil 或未定义),输出 “maybe”。
  2. 自定义文本语法yesno 过滤器后提供三个由英文逗号 , 分隔的字符串,分别对应真值、假值和空值。

    {{ 变量名 | yesno:"真值文本,假值文本,空值文本" }}
    
    • 如果 变量名 为真,输出 真值文本
    • 如果 变量名 为假,输出 假值文本
    • 如果 变量名 为空,输出 空值文本

    如果只提供两个自定义文本(例如 yesno:"是,否"),则第三种空值状态会默认显示为 “maybe”。这一点在实际使用中需要注意。

代码示例与详细解读

让我们通过几个具体的例子来看看 yesno 过滤器的应用:

假设我们在模板中拥有以下变量:

{% set user_active = true %}
{% set user_suspended = false %}
{% set user_level = nil %} {# nil 值 #}
{% set user_description = "" %} {# 空字符串 #}
{% set product_stock = 10 %} {# 非布尔值 #}

示例 1:使用默认文本

<p>用户是否活跃? {{ user_active|yesno }}</p>
<p>用户是否被禁用? {{ user_suspended|yesno }}</p>
<p>用户等级是否设置? {{ user_level|yesno }}</p>
<p>用户是否有描述? {{ user_description|yesno }}</p>

输出结果:

<p>用户是否活跃? yes</p>
<p>用户是否被禁用? no</p>
<p>用户等级是否设置? maybe</p>
<p>用户是否有描述? no</p>

解读: user_activetrue,所以是 yesuser_suspendedfalse,所以是 nouser_level 是 `