AnQiCMS模板中,`{{ obj|filter__name:param }}` 过滤器的正确使用语法是什么?

📅 👁️ 63

安企CMS(AnQiCMS)以其高效、灵活的特性,为内容运营提供了强大的支持。在日常内容展示中,我们常常需要对数据进行精细化的处理和格式化,以确保信息以**状态呈现给访问者。此时,模板中的“过滤器”就成为了我们不可或缺的利器。

今天,我们就来深入探讨安企CMS模板中过滤器的正确使用语法:{{ obj|filter_name:param }}。理解并掌握它,能让你的网站内容展现出前所未有的专业度和动态感。

过滤器:数据呈现的“精修师”

在安企CMS的模板世界里,当你从后台获取到变量(obj)时,它可能只是原始的数据。例如,一个时间戳可能需要被格式化为“2023年10月26日”,一段长文本可能需要被截断并加上省略号,或者某些HTML内容需要确保安全地渲染。过滤器,正是为这些需求而生,它像一个“精修师”,对原始数据进行处理、转换或验证,然后输出加工后的结果。

它的基本语法非常直观:

{{ obj|filter_name:param }}

让我们拆解一下这个结构:

  • {{ ... }}:这是安企CMS模板中用于输出变量内容的标准双花括号语法。所有需要展示给用户的数据,最终都会通过它输出。
  • obj:这代表你要处理的原始变量或数据对象。它可以是字符串、数字、数组,甚至是更复杂的结构体。
  • | (管道符):这个符号是过滤器的核心,它表示将左侧的 obj 作为输入,“管道”给右侧的 filter_name 进行处理。
  • filter_name:这是你希望应用的特定过滤器的名称,比如 truncatechars(截断字符)、date(日期格式化)或 safe(安全输出HTML)。
  • : (冒号):如果过滤器需要额外的参数来工作,这个冒号就用来分隔过滤器名称和它的参数。
  • param (参数):这是传递给过滤器的可选参数。不同的过滤器可能需要不同类型和数量的参数。有些过滤器可能不需要任何参数。

理解了语法,我们来看看一些常见的实际应用场景。

常见的过滤器及其用法示例

安企CMS内置了丰富的过滤器,能满足我们日常内容运营的各种需求。

1. 默认值处理:defaultdefault_if_none

当某个变量可能为空或不存在时,我们不希望页面显示空白或错误,这时就可以使用 defaultdefault_if_none 过滤器来设置一个备用值。

  • default:如果变量为空字符串、零值、nil 或布尔false,则显示默认值。
    
    <!-- 如果 userName 为空,显示 "大侠匿名" -->
    {{ userName|default:"大侠匿名" }}
    
  • default_if_none:更严格一些,只在变量为 nil(即Go语言中的nil,通常指指针类型为空)时显示默认值,而不会把空字符串或0当作空。
    
    <!-- 如果 userSignature 是 nil,显示 "这个人很懒,什么都没留下" -->
    {{ userSignature|default_if_none:"这个人很懒,什么都没留下" }}
    

2. 日期和时间格式化:date

虽然安企CMS提供了 stampToDate 标签来格式化时间戳,但如果你的变量已经是 time.Time 类型(通常由后端直接传递),date 过滤器是更简洁的选择。

<!-- 将 createTime(假设为 time.Time 类型)格式化为 "2006-01-02" 格式 -->
{{ article.createTime|date:"2006-01-02" }}

请注意,date 过滤器遵循 Go 语言的特殊日期格式化规则(例如“2006-01-02 15:04:05”是参考模板,而非实际输出)。

3. 文本截断:truncatecharstruncatewords

对于文章简介或摘要,我们经常需要限制其显示长度,同时保持阅读的连贯性。

  • truncatechars:按字符数截断文本,包括省略号。
    
    <!-- 截断 article.Description,最多显示 100 个字符,超出部分用 "..." 代替 -->
    {{ article.Description|truncatechars:100 }}
    
  • truncatechars_html:与 truncatechars 类似,但更智能,它会尝试保留 HTML 结构。
    
    <!-- 截断 HTML 文本,并保持标签闭合 -->
    {{ article.Content|truncatechars_html:200|safe }}
    
  • truncatewords:按单词数截断文本,通常用于英文内容。
    
    <!-- 截断英文文本,最多显示 20 个单词 -->
    {{ article.Abstract|truncatewords:20 }}
    

4. 内容安全与渲染:safeescape

处理用户输入或富文本内容时,防止跨站脚本(XSS)攻击至关重要。

  • safe:告诉模板引擎,该变量的内容是安全的HTML,不需要转义,可以直接渲染。常用于后台富文本编辑器生成的内容。
    
    <!-- 安全地输出 article.Content,使其作为 HTML 内容被浏览器解析 -->
    {{ article.Content|safe }}
    
    重要提示: 使用 safe 必须谨慎,确保内容来源可信,否则可能引入安全漏洞。
  • escape:强制对内容进行HTML转义,即使默认已开启自动转义,它也会再次转义。这有助于显示原始HTML代码而不是渲染它。
    
    <!-- 将可能包含 HTML 标签的 userInput 转义,显示其原始代码 -->
    {{ userInput|escape }}
    
    安企CMS默认会进行HTML转义,除非你使用了safeautoescape off

5. 长度计算:length

获取字符串、数组或映射的长度(元素数量)。

<!-- 显示文章标题的字符数 -->
{{ article.Title|length }}

<!-- 显示评论列表中的评论总数 -->
{{ comments|length }}

6. 字符串处理:addreplacesplitjoin

  • add:将两个数字或字符串相加/拼接。
    
    <!-- 数字相加 -->
    {{ price|add:discount }}
    <!-- 字符串拼接 -->
    {{ "欢迎使用"|add:"安企CMS" }}
    
  • replace:替换字符串中的特定子串。
    
    <!-- 将 article.Title 中的 "CMS" 替换为 "内容管理系统" -->
    {{ article.Title|replace:"CMS,内容管理系统" }}
    
  • split:根据指定分隔符将字符串分割成数组。
    
    <!-- 将逗号分隔的关键词字符串分割成数组 -->
    {% set tags_array = article.Keywords|split:"," %}
    {% for tag in tags_array %}
        <span>{{ tag }}</span>
    {% endfor %}
    
  • join:将数组元素用指定分隔符连接成字符串。
    
    <!-- 将 tags_array 中的元素用 " | " 连接起来 -->
    {{ tags_array|join:" | " }}
    

7. 清理字符串:trimtrimLefttrimRight

用于移除字符串首尾的空格或特定字符。

  • trim:移除字符串两端的空格或指定字符。 “`twig {{” 安企CMS “|trim}} <!– 移除字符串两

相关文章

在AnQiCMS模板中,如何快速删除字符串两端、左侧或右侧的空格或特定字符?

在内容管理中,我们经常会遇到字符串两端出现多余空格或不想要的特定字符的情况,这不仅影响内容的显示美观,有时还会对数据处理或搜索引擎优化(SEO)造成不必要的干扰。AnQiCMS 采用类似 Django 的模板引擎语法,为我们提供了简洁高效的过滤器(Filters)来轻松解决这些问题。本文将详细介绍如何在 AnQiCMS 模板中,快速删除字符串两端、左侧或右侧的空格或特定字符。 ###

2025-11-07

AnQiCMS模板如何实现将文章标题中每个单词的首字母都转换为大写?

在网站内容运营中,文章标题的规范化处理常常是提升网站专业度和用户体验的关键一环。一个整洁、一致的标题格式不仅让内容更具吸引力,也有助于提高网站的整体形象。AnqiCMS 为我们提供了一个非常简洁高效的解决方案,只需通过模板中的一个简单过滤器,就能轻松实现文章标题中每个单词首字母大写。 ### 轻松实现标题首字母大写:`title` 过滤器 AnqiCMS 模板引擎借鉴了 Django

2025-11-07

如何将AnQiCMS后台自定义字段中的所有英文文本强制转换为小写?

在网站内容运营中,保持文本格式的一致性是提升用户体验和SEO效果的关键一步。有时,我们可能会遇到这样的需求:希望后台自定义字段中输入的英文文本,无论用户如何输入大小写,最终在前台显示时都能强制转换为小写。这不仅能让页面看起来更整洁专业,也有助于避免因大小写不一致导致的SEO问题。 幸运的是,AnQiCMS 提供了一个非常灵活的内容管理方案,借助其强大的模板引擎和内置的过滤器

2025-11-07

AnQiCMS模板中,如何将用户提交的英文姓名首字母自动转换为大写?

在网站运营中,我们经常会遇到需要展示用户提交的信息,比如姓名。为了让这些信息看起来更专业、统一,通常会希望英文姓名的首字母能自动转换为大写。这不仅提升了用户界面的美观度,也保证了数据展示的一致性。在 AnQiCMS 灵活的模板系统中,实现这个需求非常简单。 AnQiCMS 的模板引擎采用了类似于 Django 的语法,其中内置了许多实用的过滤器(Filters),可以帮助我们轻松地处理文本内容

2025-11-07

如何在AnQiCMS模板中为可能为空的变量设置一个默认的友好显示值?

在构建网站模板时,我们经常会遇到这样的情况:某个变量可能因为数据未录入、可选字段留空或特定业务逻辑而导致在模板中为空值。如果不对这些空变量进行处理,网站前端页面可能会出现空白区域、显示不友好的占位符甚至导致布局错乱,从而影响用户体验和网站的专业性。 幸运的是,AnQiCMS 为此提供了两种优雅且实用的方法,帮助我们在模板中为可能为空的变量设置一个默认的友好显示值,确保网站内容的完整性和美观性

2025-11-07

AnQiCMS模板中,如何将数据库中获取的10位时间戳格式化为自定义的日期时间格式?

在网站内容展示中,我们经常会遇到从数据库获取到的时间数据是一串长长的数字,比如 `1678886400`。这串数字,也就是我们常说的时间戳,对于计算机来说很方便,但对访问网站的用户而言,却显得冰冷又难以理解。好在,安企CMS为我们提供了一个非常便捷的功能,能够将这些原始的10位时间戳轻松转换为我们习惯阅读的日期和时间格式。 ### 认识 `stampToDate`

2025-11-07

AnQiCMS的 `date` 和 `stampToDate` 过滤器在处理时间数据时有哪些主要区别?

在AnQiCMS的模板开发中,时间数据的展示是不可或缺的一部分,无论是文章的发布时间、产品的更新日期,还是用户行为的时间记录,都需要以清晰可读的方式呈现在用户面前。为了满足不同的时间处理需求,AnQiCMS提供了两个核心的过滤器:`date` 和 `stampToDate`。虽然它们都能帮助我们格式化时间,但在底层处理的数据类型上有着根本的区别,理解这些差异对于避免模板错误和高效开发至关重要

2025-11-07

在AnQiCMS模板中,如何将产品价格(浮点数)始终保留两位小数显示?

在运营产品展示型网站时,你可能经常遇到需要精确显示产品价格的情况。一个专业且用户友好的网站,往往需要统一商品价格的显示格式,例如始终保留两位小数,即使是整数价格也自动补齐为 `.00`。AnQiCMS 以其灵活的模板系统,让这些细节处理变得非常便捷。 ### 理解 AnQiCMS 模板中的数据与显示 AnQiCMS 的模板系统基于 Go 语言,但其语法风格与 Django 模板引擎非常相似

2025-11-07