在网站内容运营中,我们经常需要对显示的信息进行精细化控制。有时候,一个标题可能很长,我们只希望在特定区域展示它的首个单词,或者出于某种设计需要,想突出显示最后一个单词。安企CMS(AnQiCMS)提供了强大且灵活的模板引擎,它借鉴了Django模板语法的精髓,让我们可以通过简单的过滤器(Filters)来实现这些看似复杂的文本处理需求。

今天,我们就来聊聊如何在AnQiCMS模板中,巧妙地提取并展示一个字符串的首个或最后一个单词。

理解核心工具:过滤器

在AnQiCMS模板中,过滤器是用来修改变量显示内容的工具。它们通过 | 符号连接在变量名之后。要实现提取首个或最后一个单词,我们需要组合使用几个关键的过滤器:

  1. split 过滤器:这个过滤器能够根据你指定的分隔符,将一个字符串拆分成一个单词(或子字符串)的数组。
  2. first 过滤器:用于获取数组中的第一个元素。
  3. last 过滤器:用于获取数组中的最后一个元素。

有了这些工具,我们就可以像搭积木一样,组合出想要的功能。

获取字符串的首个单词

假设我们有一个名为 article.Title 的变量,它包含着一篇文章的完整标题,例如:“安企CMS:为您的企业级网站提供高效解决方案”。我们希望只显示标题的第一个单词“安企CMS”。

首先,我们需要将这个完整的标题字符串,按照空格拆分成一个个独立的单词。这时,split 过滤器就派上用场了。我们可以这样写:

{{ article.Title|split:" " }}

这行代码会返回一个包含所有单词的数组,例如 ["安企CMS:", "为您的", "企业级网站", "提供高效解决方案"]。请注意,如果标题中的第一个“词”包含标点符号,split:" " 默认会将其视为词的一部分。

接下来,我们只需要从这个单词数组中取出第一个元素即可。我们可以直接将 first 过滤器应用到 split 过滤器的结果上。完整的写法是:

{{ (article.Title|split:" ")|first }}

这样,页面上就会显示“安企CMS:”。如果你的标题是纯英文,例如“AnQiCMS: Efficient Solutions for Your Enterprise Website”,那么 |split:" " 之后,|first 将会得到“AnQiCMS:”。

获取字符串的最后一个单词

同样地,如果我们想获取标题“安企CMS:为您的企业级网站提供高效解决方案”的最后一个单词“解决方案”,操作过程也非常类似。

我们依然需要先使用 split 过滤器将标题拆分成单词数组:

{{ article.Title|split:" " }}

得到数组后,这次我们不再选择第一个,而是选择最后一个元素。这时,last 过滤器就显得非常合适了。完整的代码会是:

{{ (article.Title|split:" ")|last }}

这样,页面上便会显示“解决方案”。

实际应用场景与一些小贴士

这种提取字符串特定单词的功能在网站建设中有很多实用场景:

  • 动态标题简写:在卡片式列表、侧边栏或导航菜单中,如果完整标题过长,可以动态显示首个单词作为摘要。
  • 突出重点:在营销文案中,有时会刻意将最后一个词作为核心关键词,使用这种方式可以单独设置样式,使其更加醒目。
  • SEO优化:在某些布局中,可能需要将标题的某个部分作为微文案或Alt文本,保持简洁。

处理空字符串或单单词情况: 如果你担心的变量 article.Title 可能为空,或者只包含一个单词,上述方法依然能够很好地工作。如果字符串为空,split:" " 会返回一个空数组,此时 firstlast 也不会输出任何内容。如果字符串只有一个单词,split:" " 会返回一个只包含该单词的数组,firstlast 都会正确返回这个唯一的单词。

处理可能存在的HTML标签: 如果你的字符串内容可能包含HTML标签(例如,标题是从富文本编辑器中获取的),并且你希望在提取单词之前移除这些标签,可以使用 striptags 过滤器。例如:

{{ ((article.Title|striptags)|split:" ")|first }}

这样可以确保你得到的是纯文本的单词,而不是带有HTML标签的片段。

设置默认值: 为了提升用户体验,防止在某些极端情况下(例如 article.Title 变量不存在或为空)页面出现空白,你可以结合 default 过滤器来提供一个备用文本:

{{ (article.Title|split:" ")|first|default:"无标题" }}

这样,如果无法提取首个单词,页面上会显示“无标题”。

通过这些简单的过滤器组合,安企CMS为内容运营者提供了极大的便利,让我们可以更灵活、更精确地控制内容的展示方式。


常见问题 (FAQ)

1. 如果我的字符串内容是纯中文,例如“安企内容管理系统”,那么 split:" " 还能正确拆分出单词吗? 对于纯中文的连续文本,split:" " 默认会把整个字符串视为一个“单词”,因为中文字符之间没有空格作为分隔符。如果你希望将每个汉字都视为一个独立的“单词”,则需要使用 make_list 过滤器,它会将字符串拆分成单个字符的数组。例如 {{ ("安企内容管理系统"|make_list)|first }} 将输出“安”。

2. 我能否使用除空格以外的其他字符来分隔字符串? 当然可以。split 过滤器非常灵活,你可以指定任何你希望作为分隔符的字符。例如,如果你的关键词列表是“SEO,营销,建站”,你可以这样获取第一个关键词:{{ ("SEO,营销,建站"|split:",")|first }},这会得到“SEO”。

3. 如何确保提取的单词是纯文本,而不是带有HTML标签的片段? 如果你的原始字符串可能包含HTML标签(例如,标题是从富文本编辑器中获取的),建议在 split 过滤器之前先使用 striptags 过滤器。striptags 会移除字符串中的所有HTML和XML标签,只留下纯文本内容。这样,在后续进行单词拆分和提取时,就能确保得到纯文本的单词。例如:{{ ((article.Content|striptags)|split:" ")|first }}