在使用AnQiCMS进行内容创作与展示时,我们常常需要灵活控制内容在前端的呈现方式。有时候,文章或产品描述中可能包含丰富的HTML标签,这些标签是为了在详情页提供精美的排版。然而,在其他一些场景,比如在列表页显示内容摘要、作为SEO描述(meta description)输出,或者仅仅是为了在某些特定UI元素中避免样式冲突,我们可能只需要内容的纯文本形式,而不需要任何HTML标签。

AnQiCMS的模板系统基于Django模板引擎语法,提供了强大的过滤器功能,可以帮助我们轻松实现这一目标。它内置了多种过滤器,能对变量的内容进行处理,其中就有专门用于移除HTML标签的工具。

要让模板中的内容只显示纯文本,核心在于使用合适的过滤器来“剥离”HTML标签。这里主要会用到两个非常实用的过滤器:striptagsremovetags

彻底剥离所有HTML标签:使用 striptags 过滤器

striptags 过滤器是你的首选,如果你希望从内容中彻底移除所有HTML标签,只保留纯粹的文本信息。它的使用方式非常简单直观,就像给一段文字“剥去”所有带有格式的外壳一样。

例如,你的文章详情变量 archive.Content 或者描述变量 archive.Description 可能包含了 <p><strong><a> 等标签,如果你直接在模板中输出 {{ archive.Description }},AnQiCMS出于安全考虑会默认对HTML标签进行转义,将 <p> 显示为 &lt;p&gt;,用户会看到原始的HTML代码而不是渲染后的效果。而如果你使用 {{ archive.Description|safe }},标签则会被浏览器正常解析并渲染。

但是,当你的目标是纯文本时,你可以这样使用 striptags

{# 假设archive.Description内容为:<p>这是一段<b>带有</b>HTML标签的描述。</p> #}
<p>文章摘要:{{ archive.Description|striptags }}</p>

{# 假设archive.Content内容包含大量HTML排版 #}
<div class="summary-text">
    {{ archive.Content|striptags }}
</div>

经过 |striptags 过滤器的处理后,无论 archive.Descriptionarchive.Content 原本包含多么复杂的HTML结构,输出的都将是像“这是一段带有HTML标签的描述。”这样的纯文本,所有的HTML标签都会被干净地移除。

选择性移除HTML标签:使用 removetags 过滤器

在某些更精细的场景下,你可能不想移除所有HTML标签,而是希望保留部分特定的标签,例如只保留 <strong> 标签以强调关键词,而移除其他所有标签。这时,removetags 过滤器就派上用场了。

removetags 允许你指定一个或多个HTML标签名(用逗号分隔),它会精确地移除这些被指定的标签,而保留其他未被指定的标签。

使用方式如下:

{# 假设articleContent内容为:<p>欢迎<b>使用</b><i>AnQiCMS</i>的<strong>强大功能</strong>。</p> #}
{# 我们只希望移除 <p>、<i> 标签,保留 <b> 和 <strong> #}
<div class="partially-formatted-text">
    {{ articleContent|removetags:"p,i"|safe }}
</div>

在上面的例子中,输出的内容将会是“欢迎使用AnQiCMS的强大功能。”。可以看到,<i> 标签被移除了,而 <b><strong> 标签则被保留了下来。需要注意的是,如果你希望保留的标签能够被浏览器正常渲染,而不是显示为原始的HTML代码,那么在 removetags 之后,通常还需要加上 |safe 过滤器。

实际应用建议

  • 列表页摘要与SEO描述: 这是最常见的纯文本需求场景。在显示文章列表或产品列表时,通常会展示一个简短的摘要。此时,使用 |striptags 确保输出的都是纯文本,避免HTML标签破坏页面布局或影响SEO工具的抓取。
  • 前端JS操作内容: 如果你需要通过JavaScript获取DOM元素的innerText或者textContent,那么在后端模板层面就提供纯文本内容,可以简化前端脚本的编写。
  • 富文本与纯文本共存: 在文章详情页,你仍然可以使用 {{ archive.Content|safe }} 来渲染完整的HTML内容;而在同一页面的侧边栏或Meta信息区域,则可以使用 {{ archive.Description|striptags }} 来获取纯文本摘要。

AnQiCMS的这些过滤器为内容展示提供了极大的灵活性,让我们可以根据不同的需求,精准地控制内容的呈现形式,从而打造出更专业、更友好的网站用户体验。


常见问题 (FAQ)

  1. |striptags|safe 过滤器有什么区别? |striptags 过滤器的作用是从内容中移除所有HTML标签,留下纯文本。而 |safe 过滤器的作用是告诉AnQiCMS模板引擎,这段内容是安全的,不需要进行HTML实体转义,可以直接作为HTML代码渲染到页面上。简单来说,striptags 剥离HTML,safe 允许HTML被渲染。如果你想显示原始内容中的HTML,就用 |safe;如果你想移除所有HTML只留纯文本,就用 |striptags

  2. |striptags 会不会移除所有格式,包括换行符? |striptags 主要针对HTML标签进行移除,它通常不会移除文本内容中的自然换行符(\n)。如果你想将这些换行符也转换成HTML的 <br> 标签,可以先用 |striptags 移除HTML标签,然后再使用 |linebreaksbr|linebreaks 过滤器。例如:{{ archive.Content|striptags|linebreaksbr }}

  3. 如果我只想保留特定的HTML标签,但也要确保最终是纯文本,该怎么操作? 如果你希望保留比如 <strong><em> 这样的强调标签,但又不想它们以HTML形式展示,而是以纯文本中的特殊字符(例如星号或下划线)来表示,那么 removetags 可能不是**选择。removetags 会保留指定的HTML标签。若要将这些标签转换为纯文本的语义表达,通常需要在后端(内容编辑时)或通过更复杂的模板逻辑(如正则表达式匹配替换)来实现,而不是单纯依赖这两个标签剥离过滤器。如果最终目标是纯文本,即使保留了部分标签,也应该使用 striptags 来确保最终输出的是不含任何标签的纯文本。