作为一位资深的网站运营专家,我深知在日常内容管理中,灵活的模板运用是提升网站效率和用户体验的关键。安企CMS(AnQiCMS)以其基于Go语言的高效架构和对Django模板引擎语法的支持,为我们提供了强大的内容定制能力。今天,我们就来深入探讨在AnQiCMS模板中,如何优雅地检查内容是否包含特定关键词,也就是您提到的“{% if "关键词" in 变量 %}”这种判断方式的实现。
安企CMS模板中的内容包含判断:掌握 contain 过滤器的妙用
在网站运营的实际工作中,我们经常会遇到这样的需求:根据文章内容、标题或自定义字段中是否包含某个特定关键词,来决定页面上的展示方式、推荐内容,甚至是触发特定的交互逻辑。例如,我们可能希望:
- 如果文章标题包含“促销”二字,则为其添加一个醒目的“热销”标签。
- 如果产品描述中提到“限时优惠”,则显示一个倒计时模块。
- 根据文章的关键词列表中是否包含某个行业术语,来推荐相关的深度阅读。
这些场景的核心,都围绕着一个问题:如何在AnQiCMS的模板中,准确、高效地判断一个变量(无论是字符串、数组还是对象)是否包含了我们关注的“关键词”?
安企CMS的模板系统虽然语法类似Django,但它通过提供一套丰富且实用的过滤器(Filters)来扩展变量的处理能力。对于内容包含关系的检查,我们并不能直接使用Python式的in操作符,而是应该巧妙地运用AnQiCMS内置的contain过滤器。
理解contain过滤器的核心功能
contain过滤器是AnQiCMS模板引擎中专门设计用于检查内容包含关系的一把“瑞士军刀”。它的作用直白而强大:判断某个“关键词”是否包含在一行字符串、一个数组(slice)的元素中,或者作为一个键名存在于一个键值对(map)或结构体(struct)里。这个过滤器执行后,会返回一个布尔值(True或False),这正是我们进行条件判断所需要的。
它的基本语法非常简洁,通常是这样使用的:
{{ 变量 | contain:"关键词" }}
或者,当我们需要在{% if %}条件判断中使用时,它会完美融入其中:
{% if 变量 | contain:"关键词" %}
<!-- 如果变量包含关键词,这里的内容就会显示 -->
{% endif %}
接下来,我们通过几个常见的应用场景,来具体看看contain过滤器如何在AnQiCMS模板中大放异彩。
实战演练:contain过滤器的多种应用
场景一:检查文章标题或内容是否包含特定词汇
假设我们正在开发一个文章详情页,希望根据文章标题(archive.Title)是否包含“AnQiCMS”来显示一个特别的提示信息。
{% archiveDetail archiveContent with name="Title" %}
<h1 class="article-title">{{ archiveContent }}</h1>
{% if archiveContent|contain:"AnQiCMS" %}
<p class="highlight-info">✨ 这篇文章特别推荐,因为它提到了强大的 AnQiCMS!</p>
{% endif %}
{% endarchiveDetail %}
同样的,如果我们要检查文章的正文内容(archive.Content)是否包含某个词。由于文章内容通常是富文本,可能包含HTML标签,为了确保contain过滤器处理的是纯文本或我们希望的文本,并且最终输出HTML时能正确解析,我们可能需要结合其他过滤器,如striptags来剥离HTML,或者在使用archive.Content时直接配合safe过滤器:
{% archiveDetail article with name="Content" %}
<div class="article-content">
{{ article|safe }} {# 输出文章内容,并确保HTML被解析 #}
{% if article|striptags|contain:"GoLang" %}
<p class="tech-note">🔍 文章内容中包含 GoLang 相关技术讨论。</p>
{% endif %}
</div>
{% endarchiveDetail %}
在这里,article|striptags会先将HTML标签剥离,再进行关键词GoLang的判断,这样可以避免关键词被HTML标签分隔而无法匹配的情况。
场景二:根据文章关键词(Keywords)判断文章属性
安企CMS允许我们为文章设置关键词(archive.Keywords),这些关键词通常以逗号分隔的字符串形式存储。我们可以利用contain来判断文章是否属于某个特定主题。
{% archiveDetail articleKeywords with name="Keywords" %}
{% if articleKeywords|contain:"SEO优化" %}
<div class="seo-badge">🚀 SEO优化必读!</div>
{% elif articleKeywords|contain:"内容营销" %}
<div class="marketing-badge">💡 内容营销策略精选!</div>
{% endif %}
{% endarchiveDetail %}
在这个例子中,articleKeywords是一个字符串,contain过滤器会直接在这个字符串中查找“SEO优化”或“内容营销”。
如果某个字段返回的是一个数组(例如,我们通过split过滤器将逗号分隔的字符串转换成数组),contain也同样适用。例如,假设我们有一个虚拟的category_tags数组:
”`twig {% set category_tags =