在网站内容运营中,我们经常会遇到这样的需求:从包含丰富格式的内容中提取纯文本,比如在文章列表页显示摘要,或者为SEO的meta description标签提供干净的文本。安企CMS(AnQiCMS)提供了强大且灵活的模板引擎,通过内置的过滤器(filters),我们可以轻松实现对HTML内容中标签的彻底移除。
理解AnQiCMS模板中的内容处理
AnQiCMS的模板使用类似Django的语法,内容变量通过双花括号 {{ 变量 }} 来输出。当我们在后台使用富文本编辑器发布文章或页面时,内容通常会以HTML格式存储和呈现。这意味着,直接输出 {{ archive.Content }} 可能会在预期纯文本的场景中显示出 <p>、<strong>、<img> 等HTML标签,从而破坏页面布局或SEO效果。
幸运的是,AnQiCMS的模板引擎具备自动转义功能,这在一定程度上防止了恶意HTML代码的直接执行。但对于我们希望完全移除HTML标签以获取纯文本的需求,就需要用到特定的过滤器了。
核心工具:striptags 过滤器
要彻底移除HTML内容中的所有标签,最直接有效的方法是使用 striptags 过滤器。这个过滤器会将输入的字符串中的所有HTML标签(包括<p>、<a>、<img>等)全部剥离,只留下纯文本内容。
使用方法:
在模板中,你可以将需要处理的内容变量通过管道符号 | 传递给 striptags 过滤器。例如,如果你的文章内容存储在 archive.Content 中:
{{ archive.Content|striptags|safe }}
这里的 |safe 过滤器通常会在 striptags 之后使用,以确保清理后的纯文本内容在输出时不会被再次转义(尽管此时内容已经是纯文本,但加上 |safe 可以明确告诉模板引擎这是一个安全且无需额外转义的输出)。
示例:
假设 archive.Content 的值为:
<p>这是一段包含<strong>加粗</strong>和<a href="#">链接</a>的文本。</p>
使用 {{ archive.Content|striptags|safe }} 后,输出将是:
这是一段包含加粗和链接的文本。
精准控制:removetags 过滤器
有时候,我们可能不希望移除所有HTML标签,而是只想移除特定的几种,例如只移除图片标签 <img>,但保留段落 <p> 和链接 <a>。这时,removetags 过滤器就派上了用场。
使用方法:
removetags 过滤器需要一个参数,即你希望移除的HTML标签名称。如果需要移除多个标签,标签名之间用英文逗号 , 分隔。
{{ archive.Content|removetags:"img,script"|safe }}
示例:
假设 archive.Content 的值为:
<p>这是一段包含<strong>加粗</strong>、<img src="image.jpg" alt="图片">和<a href="#">链接</a>的文本。</p>
如果只想移除
<i>标签:{{ "<strong><i>Hello!</i></strong>"|removetags:"i"|safe }}输出将是:
<strong>Hello!</strong>如果只想移除
img标签:{{ archive.Content|removetags:"img"|safe }}输出将是:
<p>这是一段包含<strong>加粗</strong>、和<a href="#">链接</a>的文本。</p>如果想移除
img和a标签:{{ archive.Content|removetags:"img,a"|safe }}输出将是:
<p>这是一段包含<strong>加粗</strong>、和链接的文本。</p>
实际应用场景
列表页摘要显示: 在文章列表或产品列表页,我们通常只展示内容的摘要。为了避免摘要中出现混乱的HTML标签,可以对
item.Description或item.Content应用striptags过滤器。结合truncatechars或truncatewords过滤器,可以生成长度合适的纯文本摘要。{# 结合截断功能,生成100个字符的纯文本摘要 #} {{ item.Description|striptags|truncatechars:100|safe }}SEO Meta Description: 搜索引擎的描述标签
<meta name="description" content="...">应该只包含纯文本。你可以通过对页面的描述字段使用striptags来确保这一点,避免搜索引擎抓取到不必要的HTML代码。<meta name="description" content="{% tdk seoDescription with name="Description" %}{{ seoDescription|striptags|safe }}">特定布局需求: 当你需要将某些内容作为纯文本嵌入到JS脚本、CSS样式或者其他严格的纯文本环境中时,
striptags也是不可或缺的工具。
小结
AnQiCMS的 striptags 和 removetags 过滤器为模板中的HTML标签处理提供了简洁而强大的解决方案。无论是需要彻底清理所有标签以获取纯文本,还是仅需选择性地移除部分标签,这些工具都能帮助您更好地控制内容的呈现方式,优化页面显示效果和SEO表现。熟练运用这些过滤器,能够让您的AnQiCMS网站内容管理更加高效和灵活。
常见问题 (FAQ)
striptags和removetags过滤器有什么主要区别?striptags过滤器会移除内容中 所有 的HTML标签,只保留纯文本内容。而removetags过滤器则允许你指定一个或多个HTML标签的名称(如"img,a,script"),它只会移除这些被指定的标签,而保留其他未指定的标签。选择哪一个取决于你希望保留多少原始格式。我在列表页使用了
striptags过滤器,但摘要看起来还是很长,没有自动截断,这是为什么?striptags过滤器只是移除了HTML标签,它并不会改变内容的实际字符长度。如果希望摘要内容在移除标签后仍然是指定长度,你需要结合使用truncatechars(按字符截断)或truncatewords(按单词截断)过滤器。例如:{{ item.Description|striptags|truncatechars:100|safe }}会先移除HTML标签,然后将纯文本内容截断为最多100个字符。如果我的内容在后台是Markdown格式,它会先被渲染成HTML再被过滤器处理吗? 是的,如果您的AnQiCMS后台开启了Markdown编辑器,并且内容字段(如
archive.Content)配置为支持Markdown渲染,那么模板引擎会首先将Markdown内容转换成HTML。然后,striptags