AnQiCMS 模板中,如何截取文章摘要并添加省略号显示?

📅 👁️ 67

在网站运营中,如何让文章列表页既美观又信息量充足,是大家普遍关心的问题。通常,我们不会在列表页展示文章的完整内容,而是通过一小段“摘要”来吸引读者点击。为了保持页面的整洁和专业,这些摘要往往还需要在超出一定长度时自动截断,并添加一个优雅的省略号。

AnQiCMS 作为一款功能强大的内容管理系统,在模板中提供了灵活的工具来帮助我们实现这一需求。下面,我们就来详细探讨如何在 AnQiCMS 模板中截取文章摘要并显示省略号。

摘要内容的来源:Description 字段优先,Content 字段次之

在 AnQiCMS 中,每篇文章都有两个重要的内容字段可以作为摘要的来源:

  1. Description (文档简介):这是最理想的摘要来源。在后台发布文章时,通常会有一个“文档简介”的输入框,您可以手动填写一段精炼的文字作为文章的概括。AnQiCMS 官方文档也建议将文档简介控制在 150 字以内。如果您没有手动填写,系统会自动从 Content 字段中提取前 150 字作为默认简介。这个字段通常是纯文本,或只包含少量简单 HTML 标签。

  2. Content (文档内容):这是文章的完整内容,可能包含丰富的图文、视频和各种 HTML 结构。当 Description 字段为空时,我们可以从 Content 字段中截取一部分作为摘要。但由于 Content 字段是富文本,直接截取可能会破坏 HTML 结构,导致页面显示异常,因此需要特别处理。

了解了这两个来源后,我们的策略就是优先使用 Description 字段,当其为空时,再从 Content 字段中智能截取。

截取纯文本摘要:truncatechars 过滤器

当您确定 Description 字段是纯文本时,可以使用 truncatechars 过滤器来按字符数量截取内容并自动添加省略号。

使用方法: 在文章循环(通常是 archiveList 标签内的 for 循环)中,您可以这样调用:

{{ item.Description|truncatechars:长度 }}

其中,长度 是您希望摘要显示的字符总数,这个长度会包含最后的省略号(“…”)所占的字符。

示例: 如果您希望摘要显示最多 100 个字符:

<p>{{ item.Description|truncatechars:100 }}</p>

如果 item.Description 的内容是“这是一篇关于 AnQiCMS 模板制作的文章,内容非常详尽,希望能帮助到大家。这只是一个测试摘要,看看截取效果如何。”,并且实际长度超过 100 字符,它就会被截断成类似“这是一篇关于 AnQiCMS 模板制作的文章,内容非常详尽,希望能帮助到大家。这只是一个测试摘要,看看截取效果…”这样的形式。

处理包含 HTML 的摘要:truncatechars_html 过滤器

当您的摘要内容来自 Content 字段(它是富文本),或者 Description 字段可能包含 HTML 标签时,直接使用 truncatechars 可能会截断未闭合的 HTML 标签,导致页面布局混乱。这时,truncatechars_html 过滤器就派上用场了。它能智能地截取 HTML 内容,同时确保所有标签都被正确关闭,从而维护页面的结构完整性。

使用方法:

{{ item.Content|truncatechars_html:长度|safe }}

这里有两点需要注意:

  1. truncatechars_html:长度:这个过滤器会按照指定的字符长度截取 HTML 内容,并智能地闭合所有打开的 HTML 标签。
  2. |safe:这是至关重要的一步!AnQiCMS 的模板引擎默认会对所有输出内容进行 HTML 转义,以防止 XSS 攻击。这意味着,如果您不加 |safe,截取后的 HTML 标签(如 <p>, <strong>)将作为纯文本显示,而不是被浏览器解析。加上 |safe 后,模板引擎会认为这些内容是安全的,从而按 HTML 格式正常渲染。

示例: 如果您希望从 Content 中截取最多 150 个字符作为摘要:

<div>{{ item.Content|truncatechars_html:150|safe }}</div>

即使 item.Content 是一个复杂的 HTML 片段,truncatechars_html 也会在截取时小心翼翼,确保如 <p>...</p><strong>...</strong> 等标签的完整性,并正确添加省略号。

按单词截取:truncatewordstruncatewords_html 过滤器(可选)

除了按字符截取,AnQiCMS 也提供了按单词截取摘要的过滤器,这对于英文或其他以空格分隔单词的语言特别有用,可以避免截断一个单词的中间部分,让摘要阅读起来更自然。

  • truncatewords:用于纯文本内容,按单词数量截取。 {{ item.Description|truncatewords:20 }} (截取 20 个单词)
  • truncatewords_html:用于包含 HTML 的内容,按单词数量截取并保持 HTML 结构。 {{ item.Content|truncatewords_html:25|safe }} (截取 25 个单词,并安全渲染 HTML)

实战应用:构建一个智能摘要显示逻辑

为了达到**效果,我们通常会结合使用上述方法,构建一个智能的摘要显示逻辑:优先显示 Description 字段,如果 Description 为空,则从 Content 字段截取并安全渲染,最后再加入一个默认文本作为最终的备选。

以下是一个完整的模板代码片段,展示了如何在 archiveList 循环中实现这一逻辑:

{% archiveList archives with type="list" limit="10" %}
    {% for item in archives %}
    <article class="article-item">
        <a href="{{ item.Link }}" class="article-thumb">
            {# 优先显示文章缩略图,如果没有则显示默认图 #}
            {% if item.Thumb %}
                <img src="{{ item.Thumb }}" alt="{{ item.Title }}">
            {% else %}
                <img src="/public/static/images/default-thumb.png" alt="默认图片">
            {% endif %}
        </a>
        <div class="article-info">
            <h3><a href="{{ item.Link }}">{{ item.Title }}</a></h3>
            <div class="article-meta">
                <span>发布日期:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
                <span>阅读量:{{ item.Views }}</span>
            </div>
            <p class="article-summary">
                {% if item.Description %}
                    {# 优先使用 Description 字段,并截取为 120 字符 #}
                    {{ item.Description|truncatechars:120 }}
                {% else %}
                    {# 如果 Description 为空,则从 Content 截取 150 字符并确保 HTML 安全 #}
                    {{ item.Content|truncatechars_html:150|safe|default:"暂无内容" }}
                {% endif %}
            </p>
            <a href="{{ item.Link }}" class="read-more">阅读更多 &raquo;</a>
        </div>
    </article>
    {% empty %}
    <p>抱歉,目前没有可供展示的文章。</p>
    {% endfor %}
{% endarchiveList %}

在这段代码中:

  • 我们首先检查 item.Description 是否有内容。如果有,就使用 truncatechars 截取它。
  • 如果 item.Description 为空,我们就转而使用 item.Content,通过 truncatechars_html 进行 HTML 安全截取,并加上 |safe 过滤器确保内容被正确解析。
  • 最后,|default:"暂无内容" 作为一个兜底,确保即使 Content 截取后仍然为空(比如文章内容太短或根本没有内容),也能显示一个友好的提示。

通过上述方法,您可以灵活地在 AnQiCMS 模板中截取文章摘要,并以美观、安全的方式在列表页展示出来,大大提升用户浏览体验。


常见问题 (FAQ)

Q1:截取长度是否包含省略号的字符数? A1:是的,当您使用 truncatecharstruncatechars_html 过滤器时,您设定的长度会包含最后自动添加的省略号(“…”)所占的字符。例如,如果您设置截取长度为 100,最终显示的摘要(包含省略号)的字符总数就是 100。

Q2:为什么截取 HTML 内容时需要 |safe 过滤器? A2

相关文章

如何实现文章内容中的HTML标签安全输出,避免XSS攻击?

在AnQiCMS中,我们追求的不仅是高效灵活的内容管理,更将网站安全视为核心要素。在日常的内容创作和模板开发中,一个看似简单的HTML标签输出,实则隐藏着潜在的安全风险,其中最常见的便是跨站脚本(XSS)攻击。理解AnQiCMS如何处理HTML输出,并掌握安全实践,对于构建一个坚固、可靠的网站至关重要。 ### AnQiCMS如何处理HTML内容的输出? 在AnQiCMS的模板渲染机制中

2025-11-07

AnQiCMS 如何在模板中判断变量是否为空并显示默认内容?

在网站内容运营中,数据的完整性和展示的优雅性至关重要。我们经常会遇到这样的情况:某些字段的数据可能因为各种原因而缺失,比如一篇文章可能没有配图,一个产品可能没有详细描述,或者一个自定义字段可能没有填写。如果模板代码没有做相应的空值判断,轻则导致页面出现空白,影响美观,重则可能引发模板渲染错误,影响用户体验。 AnQiCMS 凭借其基于 Go 语言的高效架构和类似 Django

2025-11-07

怎样在特定页面(如关于我们)使用独立的自定义页面模板显示?

您好!在使用安企CMS搭建网站的过程中,我们经常会遇到这样的需求:某些特定页面,比如“关于我们”、“联系我们”或者一些专题页面,需要与网站其他页面有截然不同的布局和设计。幸运的是,安企CMS为此提供了非常灵活的解决方案,让您可以轻松地为这些页面指定独立的自定义模板。 安企CMS以其基于Go语言的高效特性和对Django模板引擎语法的支持,为内容展示带来了极大的便利和可定制性

2025-11-07

AnQiCMS 如何在前端模板中获取并显示文章的Tag标签列表?

AnQiCMS 作为一个高效、灵活的内容管理系统,提供了丰富的功能来帮助运营者管理和展示网站内容。其中,文章的Tag标签功能是优化内容组织、提升用户体验和SEO效果的重要一环。了解如何在前端模板中获取并显示这些标签,对于构建功能完善的网站至关重要。 ### 在AnQiCMS后台管理标签 在深入前端模板之前,我们先简要回顾一下标签在AnQiCMS后台是如何工作的

2025-11-07

怎样在前端模板中显示网站的友情链接列表?

在网站运营中,友情链接不仅仅是网站之间互通的桥梁,更是提升网站权重、增加外部流量、优化搜索引擎排名的重要策略之一。合理配置和展示友情链接,能够有效改善网站的SEO表现,同时为用户提供更多有价值的外部资源。AnQiCMS 作为一款高效的内容管理系统,充分考虑了这一需求,提供了简便直观的方式来管理和在前端模板中展示友情链接。 ### 后端管理:友情链接的设置与维护 要在前端页面展示友情链接

2025-11-07

如何在前端展示用户评论列表,并支持审核状态显示?

用户评论是网站活力的重要体现,它们不仅能增加内容的互动性,还能为其他访问者提供有价值的参考。安企CMS深知评论管理的重要性,提供了简洁而强大的功能,让您能够在网站前端灵活地展示评论列表,并清晰地标识评论的审核状态。 ### 在前端展示评论列表的核心:`commentList` 标签 要在您的网站前端页面上展示用户评论,您需要使用AnQiCMS提供的`commentList`模板标签

2025-11-07

AnQiCMS 如何在模板中动态显示网站的Logo图片?

网站的Logo是品牌形象的核心,它不仅能提升网站的专业度,也方便用户快速识别和记忆您的品牌。对于AnQiCMS的用户来说,在网站模板中动态显示Logo图片是一项基本而又重要的操作。幸运的是,AnQiCMS提供了非常便捷的方式来实现这一点,让您无需编写复杂的代码就能轻松管理和展示网站Logo。 ### 管理网站Logo:后台设置是关键 要在您的AnQiCMS网站上显示Logo

2025-11-07

怎样在网站内容中插入Markdown格式的文本并正确渲染为HTML?

在AnQiCMS中,将Markdown格式的文本插入内容并正确渲染为HTML,是内容运营者提高效率和产出高质量页面的重要方式。AnQiCMS内置了对Markdown编辑和渲染的支持,让您在撰写内容时既能享受Markdown的简洁高效,又能确保最终页面输出美观且结构化的HTML。 ### 启用Markdown编辑器 要开始在AnQiCMS中使用Markdown,首先需要确保其编辑器功能已启用

2025-11-07