在网站内容运营中,我们经常会遇到这样的情况:从数据库调取出来的模板变量内容,可能包含了一些不必要的字符、多余的空格,或者格式不尽如人意。这些细微之处如果不能妥善处理,可能会影响页面的美观、用户体验,甚至对搜索引擎优化(SEO)造成干扰。AnQiCMS 提供了强大的模板过滤功能,帮助我们轻松地清理和格式化这些变量。
AnQiCMS 的模板语法类似于 Django 引擎,它允许我们通过一种叫做“过滤器”(Filters)的机制来处理模板变量。过滤器可以对变量进行各种操作,例如格式化文本、修改字符串、移除特定内容等。使用过滤器非常直观,你只需要在变量名后面加上一个“管道符” |,然后跟随过滤器的名称,如果过滤器需要参数,再用冒号 : 连接参数即可,例如 {{ 变量名 | 过滤器名称 : 参数 }}。如果需要连续使用多个过滤器,只需将它们串联起来:{{ 变量名 | 过滤器1 | 过滤器2 : 参数 }}。
移除特定字符的利器:cut 和 replace 过滤器
当我们想要从模板变量中删除某些特定的字符时,cut 和 replace 这两个过滤器就派上了用场。
cut 过滤器
cut 过滤器能够删除字符串中所有出现的特定字符。它的用法非常简单,只需指定你想要删除的那个字符。例如,如果有一个变量 productName 的值为 "安企CMS-免费-高效",但你希望移除其中的所有连字符 -,你可以这样使用:
{{ productName|cut:"-" }}
这样输出的结果就会是 "安企CMS免费高效"。需要注意的是,cut 过滤器只能删除单个字符的所有实例,如果你想删除一个词或一段文本,就需要使用 replace 过滤器。
replace 过滤器
replace 过滤器比 cut 更为强大,它可以将字符串中某个特定的关键词(或子字符串)替换为另一个关键词。这对于更复杂的字符清理任务非常有用。它的使用方式是 {{ obj|replace:"旧词,新词" }},其中“旧词”是你想要替换掉的内容,“新词”是你希望替换成的内容,两者之间用英文逗号 , 分隔。
例如,你的文章标题 articleTitle 可能包含 "AnQiCMS是一个优秀的CMS",你想把所有的 "CMS" 替换成 "内容管理系统",可以这样写:
{{ articleTitle|replace:"CMS,内容管理系统" }}
输出会变成 "AnQi内容管理系统是一个优秀的內容管理系统"。
如果你的目标是彻底移除某个关键词,你可以将“新词”部分留空。比如,要移除标题中的所有 "优秀" 字样:
{{ articleTitle|replace:"优秀," }}
这会将 "AnQiCMS是一个优秀的CMS" 变为 "AnQiCMS是一个的CMS"。
一个非常实用的场景是,当变量中包含多个内部空格时,你希望将它们全部删除,replace 过滤器也能派上用场:
{{ " 这是 包含 多余 空格的 字符串 "|replace:" ","" }}
但请注意,这种方式只会删除 单个空格。如果你有多个连续空格,可能需要多次调用 replace,或者使用更高级的文本处理方式。
处理多余的空格:trim 系列过滤器
多余的空格,特别是字符串开头和结尾的空格,常常会影响内容的对齐和显示。AnQiCMS 提供了 trim、trimLeft 和 trimRight 过滤器来精准处理这些空格。
trim 过滤器
trim 过滤器能够删除字符串开头和结尾的所有空格(包括换行符)。这是最常用的空格清理工具。
例如,有一个从用户输入获取的名称 userName,其值为 " 张三 ",为了避免显示时出现空白,可以使用:
{{ userName|trim }}
这样输出的结果就是整洁的 "张三"。trim 也可以指定要删除的首尾特定字符,例如 {{ "###标题###"|trim:"#" }} 会输出 "标题"。
trimLeft 和 trimRight 过滤器
如果你的需求更为精细,只想删除字符串开头或结尾的空格,那么 trimLeft 和 trimRight 过滤器将是你的选择。
trimLeft过滤器只删除字符串开头的所有空格:{{ " Hello World "|trimLeft }}输出结果为
"Hello World "。trimRight过滤器只删除字符串结尾的所有空格:{{ " Hello World "|trimRight }}输出结果为
" Hello World"。
和 trim 类似,这两个过滤器也可以指定删除特定的前导或尾随字符。
组合运用与**实践
在实际应用中,你可能需要组合使用这些过滤器来达到**效果。例如,你可能需要先移除字符串首尾的空格,然后替换掉其中的某些特定字符,再将其中的多个连续空格替换成一个空格。
一个典型的例子是清理从外部数据源获取的文本,它可能同时有首尾空格和内部的特殊符号:
{% set rawText = " ## AnQiCMS - 内容管理系统 ## " %}
{{ rawText|trim|replace:"##,"|replace:" - ","-" }}
这条语句会首先移除 rawText 两端的空格,然后删除所有的 `