如何判断一个字符串、数组或映射中是否包含某个特定关键词并显示布尔结果?

📅 👁️ 86

在安企CMS的模板开发中,我们经常需要根据内容的特定属性或关键词来动态调整页面的显示。例如,判断一篇文章的标题是否包含某个词语,一个产品分类是否在某个列表中,或者某个配置项是否存在。安企CMS强大的模板引擎提供了多种过滤器和操作符,可以帮助我们轻松实现这些判断,并获得清晰的布尔(True/False)结果。

让我们深入了解如何在安企CMS中实现这些灵活的判断。

核心功能:contain 过滤器

当您需要判断一段文字字符串、一个数组(或Go语言中的slice)的元素,或者一个映射(map)/结构体(struct)的键名是否包含某个特定的关键词时,contain 过滤器是您的首选工具。它会返回一个布尔值,直接告诉您结果是 True(包含)还是 False(不包含)。

基本用法

contain 过滤器的使用方式非常直观:

{{ obj|contain:"关键词" }}

其中 obj 是您要检查的变量,而 "关键词" 则是您希望查找的特定内容。

在条件判断中的应用

通常,我们会将 contain 过滤器的结果用于 if 逻辑判断标签中,从而控制模板的显示逻辑。

{% if "欢迎使用安企CMS(AnQiCMS)"|contain:"CMS" %}
    <p>这段文字中包含了"CMS"!</p>
{% else %}
    <p>这段文字中没有找到"CMS"。</p>
{% endif %}

您也可以先将 contain 过滤器的结果存储到一个变量中,再进行后续的判断,这有助于提升代码的可读性和复用性:

{% set sourceText = "安企CMS,高效内容管理" %}
{% set isFound = sourceText|contain:"内容管理" %}

{% if isFound %}
    <p>内容中提到了“内容管理”这个关键词。</p>
{% else %}
    <p>内容中未提及“内容管理”。</p>
{% endif %}

针对不同数据类型的判断

contain 过滤器在处理不同数据类型时展现了其灵活性:

  1. 字符串中的关键词查找:obj 是一个字符串时,contain 会检查该字符串是否包含指定的关键词作为其子串。

    {% set articleTitle = "安企CMS:打造企业级内容管理平台" %}
    {% if articleTitle|contain:"企业级" %}
        <p>文章标题强调了“企业级”特性。</p>
    {% else %}
        <p>文章标题未突出“企业级”特性。</p>
    {% endif %}
    
  2. 数组(slice)中的元素查找:obj 是一个数组时,contain 会检查数组中是否存在一个与指定关键词完全匹配的元素。

    {% set tags = ["CMS", "GoLang", "企业", "效率"] %}
    {% if tags|contain:"GoLang" %}
        <p>这篇文章的标签包含了“GoLang”</p>
    {% else %}
        <p>这篇文章的标签不包含“GoLang”</p>
    {% endif %}
    
  3. 映射(map)或结构体(struct)的键名查找:obj 是一个映射或结构体时,contain 会判断其中是否存在指定的键名(或字段名)。需要注意的是,它判断的是键名,而不是键值。

    {# 假设有一个名为 `contactInfo` 的映射变量 #}
    {% set contactInfo = {"email": "info@anqicms.com", "phone": "123456789"} %}
    {% if contactInfo|contain:"phone" %}
        <p>联系方式中提供了电话号码。</p>
    {% else %}
        <p>联系方式中未提供电话号码。</p>
    {% endif %}
    

相关但略有不同的用途:in 操作符

除了 contain 过滤器,安企CMS的模板引擎还支持 in 操作符,它在某些场景下与 contain 类似,但侧重于精确匹配元素的存在。in 操作符主要用于判断一个元素是否精确存在于一个数组(slice)或映射(map)的中。

{# 判断数字 5 是否存在于数字列表 simple.intmap 中 #}
{% if 5 in simple.intmap %}
    <p>数字 5 存在于列表中。</p>
{% else %}
    <p>数字 5 不存在于列表中。</p>
{% endif %}

{# 判断字符串 "Hello" 是否存在于字符串列表 simple.misc_list 中 #}
{% if "Hello" in simple.misc_list %}
    <p>“Hello”存在于列表中。</p>
{% else %}
    <p>“Hello”不存在于列表中。</p>
{% endif %}

containin 的区别总结:

  • contain 过滤器:
    • 用于字符串时,进行子串查找
    • 用于数组时,进行精确元素匹配
    • 用于映射/结构体时,检查键名(字段名)是否存在
  • in 操作符:
    • 用于数组时,进行精确元素匹配
    • 用于映射时,检查精确键名是否存在
    • 不能直接用于字符串的子串查找。

简单来说,如果您需要对字符串进行子串模糊匹配,或者判断映射的键名是否存在,contain 是更通用的选择。如果您只需检查数组中是否存在某个精确的元素,或者映射中是否存在某个精确的键,in 操作符则更为简洁。

其他辅助判断方式

除了上述直接返回布尔结果的方法,还有一些过滤器通过返回特定数值来间接表达”包含”或”不包含”的状态:

  • index 过滤器: 用于查找关键词在字符串或数组中首次出现的位置。如果返回 -1,则表示未找到。
    
    {% if "安企CMS"|index:"CMS" != -1 %}
        <p>“CMS”在字符串中出现。</p>
    {% endif %}
    
  • count 过滤器: 用于计算关键词在字符串或数组中出现的次数。如果返回 0,则表示未找到。
    
    {% if "安企CMS"|count:"CMS" > 0 %}
        <p>“CMS”在字符串中至少出现一次。</p>
    {% endif %}
    
    这些辅助方法在需要获取更多信息(如位置、次数)的同时,也能通过简单的比较操作实现布尔判断。

通过灵活运用 contain 过滤器和 in 操作符,结合 if 逻辑标签,您可以轻松地在安企CMS模板中实现各种复杂的条件判断,让您的网站内容展示更加动态和智能化。


常见问题 (FAQ)

  1. contain 过滤器是否区分大小写? 是的,contain 过滤器在进行字符串匹配时是区分大小写的。例如,"AnQiCMS"|contain:"cms" 将返回 False。如果您需要进行不区分大小写的判断,可以考虑先使用 lowerupper 过滤器将待检查的字符串和关键词都转换为相同的大小写(例如都转换为小写),然后再使用 contain 过滤器。 示例:{% if articleTitle|lower|contain:keyword|lower %}

  2. 如何判断一个字符串是否包含多个关键词(例如同时包含“CMS”和“GoLang”)? 您可以在 if 语句中结合使用 andor 逻辑操作符来判断是否包含多个关键词。

    • 同时包含(and): {% if articleTitle|contain:"CMS" and articleTitle|contain:"GoLang" %}
    • 包含其中任意一个(or): {% if articleTitle|contain:"CMS" or articleTitle|contain:"GoLang" %}
  3. contain 过滤器能否判断映射(map)中的键值是否包含某个关键词? 不能。contain 过滤器在用于映射(map)时,只会检查映射中是否存在特定的键名

相关文章

如何将用户注册或分组的详细信息(如用户名、等级、头像)显示在前台?

在网站运营中,让前台页面展示丰富的用户相关信息,是提升用户体验和社区活跃度的有效方式。无论是展示作者的头像、用户的等级,还是注册时的用户名,这些个性化的细节都能让网站显得更具活力。AnQiCMS作为一个功能强大的内容管理系统,为我们提供了非常灵活的模板标签和数据调用能力,让这些信息的展示变得轻松简单。 ### 理解AnQiCMS的用户与分组数据 在AnQiCMS的后台

2025-11-08

如何将文本中的URL和电子邮件地址自动转换为可点击的链接并显示?

在网站内容管理中,我们经常会遇到需要在文章或页面中展示各种链接和电子邮件地址的场景。手动将这些文本格式转换为可点击的HTML链接不仅耗时,还容易出错,尤其当内容量庞大时,工作量更是惊人。安企CMS深知用户的这一痛点,内置了高效且智能的文本处理机制,能够自动识别并转换URL和电子邮件地址,极大地提升了内容发布的效率和用户浏览体验

2025-11-08

如何将浮点数按照指定的精度(小数点位数)进行格式化显示?

在AnQiCMS中,内容展示的灵活性是其核心优势之一。当我们处理需要精确展示小数位数的浮点数时,了解如何利用其强大的模板引擎功能就显得尤为重要。无论是展示商品价格、统计数据还是技术参数,确保数字以期望的格式呈现,能够极大地提升用户体验和网站的专业度。 安企CMS的模板语法借鉴了Django模板引擎,提供了丰富的过滤器(Filters)来处理和格式化数据。对于浮点数的格式化显示

2025-11-08

如何在模板中调试显示变量的结构、类型和值,以帮助排查显示问题?

在安企CMS的模板开发过程中,有时我们会遇到变量未能如期显示,或者显示内容不正确的情况。这不仅可能影响网站的正常功能,也可能让内容展示出现偏差,降低用户体验。面对这类问题,我们需要一个高效、直观的工具来帮助我们快速定位症结所在。 安企CMS提供了一个非常实用的内置过滤器——`dump`,它能帮助我们清晰地查看模板中任何变量的结构、类型和当前值。掌握这个调试利器,能大幅提升模板开发和排错的效率

2025-11-08

如何计算某个关键词在字符串或数组中出现的次数并显示?

在内容运营的日常工作中,我们经常需要对网站内容进行深入分析,其中一项常见的需求就是了解某个关键词在特定字符串或内容块中出现的频率。这不仅对于SEO优化至关重要,也能帮助我们评估内容的相关性和质量。安企CMS作为一款高效的企业级内容管理系统,为我们提供了非常便捷的内置工具来解决这个问题,那就是功能强大的 `count` 过滤器。 ### 认识 `count` 过滤器 `count`

2025-11-08

如何删除字符串开头、结尾或所有位置的空格或指定字符,再进行显示?

在网站内容运营中,我们经常会遇到字符串中包含不必要的空格或特定字符的情况。这些看似细微的问题,却可能影响内容的展示美观度、SEO效果乃至用户体验。例如,一个产品标题前后有空格可能在不同设备上显示不一致,或者一个关键词列表被额外的符号包围,影响了搜索引擎的识别。 安企CMS基于Go语言开发,其强大的Django模板引擎提供了多种实用的过滤器,能帮助我们轻松地处理这些字符串,确保最终呈现的内容干净

2025-11-08

如何实现图片上传后自动转换为WebP格式,以优化前端加载显示速度?

在当今内容运营中,网站加载速度对用户体验和搜索引擎排名至关重要。图片作为网页内容的重要组成部分,其加载性能往往是影响整体速度的关键因素。安企CMS(AnQiCMS)深知这一点,提供了便捷的图片优化功能,特别是图片上传后自动转换为WebP格式,能显著提升网站前端的显示速度。 ### WebP格式:前端加载的提速利器 WebP是一种由Google开发的图片格式

2025-11-08

如何批量重新生成所有内容的缩略图,以适应新的前端显示尺寸?

当网站的视觉风格需要焕然一新,或者为了适应不断变化的设备显示尺寸,我们经常需要调整图片缩略图的大小。安企CMS(AnQiCMS)深知这一点,并为此类需求提供了便捷而高效的解决方案。面对前端显示尺寸的调整,如何批量地为所有内容重新生成缩略图,以确保网站美观度和加载效率,是许多运营者关心的问题。 ### 为什么需要重新生成缩略图? 缩略图在网站运营中扮演着至关重要的角色

2025-11-08