AnQiCMS模板中如何正确使用双花括号`{{}}`和百分号`{% %}`标签控制内容的显示逻辑?

📅 👁️ 72

在使用安企CMS(AnQiCMS)构建和管理网站时,灵活运用模板语言是提升效率和实现个性化展示的关键。其中,双花括号 {{}} 和百分号标签 {% %} 是模板文件中控制内容显示逻辑的两位核心“角色”。它们各自承担着不同的职责,理解并正确使用它们,能帮助您轻松驾驭AnQiCMS的强大模板功能。

一、内容的“发声筒”:双花括号 {{}} 的妙用

双花括号 {{}} 的主要作用是输出变量的内容。当您需要在网页上直接展示来自后台数据或模板中定义的变量时,{{}} 就派上了用场。它们就像一个传声筒,将变量所承载的信息原封不动地“喊”出来。

最常见的用法是输出页面的标题、文章内容或系统设置:

<title>{{tdk.Title}}</title>
<h1>{{archive.Title}}</h1>
<img src="{{system.SiteLogo}}" alt="{{system.SiteName}}" />

在这里,tdk.Titlearchive.Titlesystem.SiteLogosystem.SiteName 都是从AnQiCMS后台获取的变量。

更强大的是,{{}} 可以与过滤器(Filters)结合使用,对输出内容进行格式化和处理。例如,您可能需要格式化日期、截断过长的文本,或者进行大小写转换:

<span>发布日期:{{item.CreatedTime | stampToDate("2006-01-02")}}</span>
<p>{{item.Description | truncatechars:100}}</p>
<div>{{item.Title | upper}}</div>
  • stampToDate("2006-01-02") 过滤器将时间戳 item.CreatedTime 格式化为“年-月-日”的字符串。
  • truncatechars:100 过滤器会将 item.Description 截断为最多100个字符,并附加省略号。
  • upper 过滤器则将 item.Title 中的所有英文字母转换为大写。

需要特别注意的是,出于安全考虑,{{}} 默认会自动转义 HTML 标签和 JavaScript 代码,以防止跨站脚本攻击(XSS)。如果您确定某个变量的内容是安全的HTML,并且希望它能被浏览器解析而不是作为纯文本显示,可以使用 |safe 过滤器:

<div>{{archive.Content | safe}}</div>

这在显示文章详情、富文本编辑器内容等场景中非常有用。

二、逻辑的“指挥棒”:百分号标签 {% %} 的艺术

与用于内容输出的 {{}} 不同,百分号标签 {% %} 主要用于控制模板的逻辑流和行为。它们不会直接输出内容,而是执行一系列指令,如条件判断、循环遍历、引入其他模板文件或调用AnQiCMS提供的各种数据标签。所有 {% %} 标签都需要成对出现,即有一个起始标签和一个对应的结束标签(如 {% if %} 对应 {% endif %})。

  1. 条件判断:{% if %} 掌控内容的显示逻辑 当您需要根据特定条件来决定是否显示某段内容时,{% if %} 标签是您的首选。它支持 elif(否则如果)和 else(否则)结构,让逻辑判断更加灵活。

    {% if item.Thumb %}
        <img src="{{item.Thumb}}" alt="{{item.Title}}" />
    {% else %}
        <img src="/static/images/default-thumb.png" alt="无缩略图" />
    {% endif %}
    

    这段代码判断如果 item.Thumb 变量存在,就显示对应的缩略图;否则,显示一张默认的图片。

  2. 循环遍历:{% for %} 动态生成列表 对于列表数据(如文章列表、分类列表、导航菜单),{% for %} 标签能够遍历数组或集合,为每个元素生成重复的HTML结构。它还可以与 {% empty %} 结合,处理列表为空的情况。

    {% archiveList archives with type="page" limit="10" %}
        {% for item in archives %}
        <li>
            <a href="{{item.Link}}">{{item.Title}}</a>
            <span>浏览量:{{item.Views}}</span>
        </li>
        {% empty %}
        <li>目前还没有任何文章发布。</li>
        {% endfor %}
    {% endarchiveList %}
    

    这里,archiveList 是一个AnQiCMS的自定义标签,用于获取文章列表。{% for item in archives %} 则遍历这个列表,生成每个文章的链接和标题。如果 archives 为空,则显示 {% empty %} 中的内容。

  3. 自定义标签:AnQiCMS 强大功能的入口 AnQiCMS提供了丰富的自定义标签,让您无需编写复杂的数据库查询,即可轻松获取各种数据。这些自定义标签都是通过 {% %} 来调用的,例如:

    • 获取分类列表:{% categoryList %}

      {% categoryList categories with moduleId="1" parentId="0" %}
          <ul>
              {% for category in categories %}
                  <li><a href="{{category.Link}}">{{category.Title}}</a></li>
              {% endfor %}
          </ul>
      {% endcategoryList %}
      

      这段代码会获取文章模型(moduleId=1)下的所有顶级分类(parentId=0),并循环显示它们的名称和链接。

    • 获取系统配置:{% system %}

      <p>版权所有:{% system with name="SiteCopyright" %}</p>
      

      直接获取后台配置的版权信息。

  4. 变量声明:{% with %}{% set %} 简化模板 当您需要在模板中定义临时变量来存储数据或简化表达式时,可以使用 {% with %}{% set %}

    {% with greeting="你好,世界!" %}
        <p>{{greeting}}</p>
    {% endwith %}
    
    {% set todayDate = now("2006-01-02") %}
    <p>今天是:{{todayDate}}</p>
    
  5. 模板组织:{% include %}{% extends %} 提升可维护性 为了提高模板的可重用性和可维护性,AnQiCMS支持模板的拆分和继承。

    • {% include "partial/header.html" %}:将一个公共的模板片段(如头部导航、页脚)引入到当前模板中。
    • {% extends 'base.html' %}:允许您定义一个基础布局(骨架模板),其他页面模板通过继承它并重写特定区块({% block %})来构建页面,避免重复编写大量代码。
    <!-- base.html (骨架模板) -->
    <!DOCTYPE html>
    <html>
    <head>
        <title>{% block title %}默认标题{% endblock %}</title>
    </head>
    <body>
        {% include "partial/header.html" %}
        <div id="content">
            {% block content %}
                <!-- 页面内容将在此处插入 -->
            {% endblock %}
        </div>
        {% include "partial/footer.html" %}
    </body>
    </html>
    
    <!-- index.html (继承 base.html) -->
    {% extends 'base.html' %}
    
    {% block title %}首页 - 我的网站{% endblock %}
    
    {% block content %}
        <h1>欢迎来到我的首页!</h1>
        <p>这是首页的专属内容。</p>
    {% endblock %}
    

三、使用这些标签的黄金法则

掌握 AnQiCMS 模板标签,除了了解其功能外,还需要注意一些通用的原则:

  1. 严格区分大小写:AnQiCMS 的模板变量和标签名都是大小写敏感的。item.Titleitem.title 会被视为两个不同的变量。
  2. 标签成对出现:所有 {% %} 标签,如 {% if %}{% for %}{% with %} 等,都需要有对应的结束标签,如 {% endif %}{% endfor %}{% endwith %}
  3. 清理空白行:默认情况下,模板引擎在解析 {% %} 逻辑标签时,可能会输出标签所在行产生的空白符。为了避免不必要的空白行影响页面布局,可以在标签内部的前后使用 - 符号,如 {%- if %}{% endif -%}
  4. 理解上下文:不同的页面(如首页、文章详情页、分类列表页)或不同的自定义标签(如 archiveListcategoryList)会提供不同的变量上下文。确保您在当前语境中访问的变量是存在的。

通过深入理解 {{}}{% %} 这两种核心标签,您将能够更高效、更灵活地使用AnQiCMS来构建和维护您的网站模板,实现丰富多样的内容展示和功能。


常见问题 (FAQ)

  1. 为什么我的 {{变量}} 输出的是 HTML 代码而不是解析后的内容? 这是AnQiCMS模板引擎的默认安全机制,为了防止XSS攻击,它会自动转义HTML标签。如果您确定要输出的HTML内容是安全的,并且希望浏览器将其解析渲染,您需要使用 |safe 过滤器。例如:{{ archive.Content | safe }}

  2. 为什么我在模板中引用 {{变量}} 时,有时会显示空白,而不是我期望的内容? 这通常有几个原因:

    • 变量名拼写错误:请仔细检查变量名是否与文档或实际数据结构中的一致,包括大小写。
    • 变量在当前上下文中不存在:某些变量只在特定页面类型或特定自定义标签的循环中可用。例如,item.Title 仅在 {% for item in list %} 循环中有效

相关文章

AnQiCMS如何启用Markdown编辑器并正确显示数学公式和流程图?

在内容创作日益丰富的今天,纯文本已难以满足表达复杂概念的需求。无论是学术文章中复杂的数学公式,还是项目管理中清晰的流程图,若能直观地呈现在网页上,无疑能极大地提升内容的专业性和用户体验。安企CMS(AnQiCMS)深知这一需求,通过内置的Markdown编辑器和灵活的前端配置,让您能够轻松实现这些高级内容展示。 本文将详细介绍如何在AnQiCMS中启用Markdown编辑器

2025-11-08

AnQiCMS如何根据不同的站点ID调用并显示特定站点的数据?

AnQiCMS多站点数据调用:轻松实现内容共享与联动展示 AnQiCMS作为一款专为中小企业和内容运营团队打造的内容管理系统,其多站点管理功能是其核心亮点之一。在实际运营中,我们经常会遇到这样的需求:主站需要展示各个子站点的最新产品,或者所有子站点都需要统一显示公司总部的联系方式,再或者多个内容平台希望聚合展示某一个特定主题的文章。在这种情况下,如何高效地调用并显示特定站点的数据就显得尤为重要

2025-11-08

如何在AnQiCMS模板中为多语言页面添加`hreflang`标签以优化SEO?

在当今全球化的互联网环境中,许多网站都需要为不同语言或地区的受众提供内容。为了确保这些多语言页面能够被搜索引擎正确理解和展示,`hreflang` 标签扮演着至关重要的角色。它能够告诉搜索引擎,您的网站有多个语言版本,并且哪个版本应该展示给哪个用户。对于使用安企CMS(AnQiCMS)构建多语言网站的用户来说,理解并正确配置 `hreflang` 标签

2025-11-08

AnQiCMS如何实现多语言站点的切换链接显示?

在当今全球化的数字世界中,网站的多语言支持已成为触达更广泛受众、拓展市场边界的关键。安企CMS(AnQiCMS)深知这一需求,因此将多语言支持作为其核心功能之一,旨在帮助用户高效地构建和管理多语言网站。本文将围绕如何在AnQiCMS中实现多语言站点的切换链接显示,并辅以必要的SEO实践,为您提供一份详尽的指南。 ### AnQiCMS的多语言能力概览 安企CMS提供了一套灵活的多语言解决方案

2025-11-08

如何自定义AnQiCMS内容模型以满足不同内容类型(如文章、产品)的展示需求?

在当今快速变化的数字世界里,网站内容早已不再是简单的文章或产品介绍。为了精准触达用户、提升转化,我们往往需要针对不同类型的内容,量身定制其展示形式和数据结构。AnQiCMS(安企内容管理系统)深谙此道,它提供的灵活内容模型功能,正是解决这一挑战的强大工具。 ### 理解AnQiCMS内容模型的核心价值 你可能运营着一个企业网站,既要发布行业新闻、技术文章,又要展示详细的产品参数和成功案例

2025-11-08

在AnQiCMS中,如何通过配置伪静态规则来优化URL结构,改善内容在搜索引擎中的显示?

在内容管理系统中,URL结构的重要性不言而喻。一个清晰、简洁且富有含义的URL不仅能提升用户体验,更是搜索引擎优化(SEO)的关键一环。在AnQiCMS中,通过精心配置伪静态规则,我们能够将那些原本可能带有复杂参数的动态URL转化为静态形式,从而让网站内容在搜索引擎中获得更好的显示效果。 ### 理解伪静态:为何它对您的网站至关重要? 想象一下,一个网页的地址是`www

2025-11-08

AnQiCMS的文档列表标签`archiveList`如何根据不同条件(分类、模型、推荐属性)筛选并显示内容?

在使用安企CMS构建网站时,灵活地展示内容是实现出色用户体验和高效内容管理的关键。其中,`archiveList`标签无疑是内容展示的核心工具,它能帮助我们根据各种条件筛选并呈现文章、产品或其他自定义内容模型的数据。本文将深入探讨`archiveList`标签如何根据分类、内容模型、推荐属性等条件,精确地筛选并展示您想要的内容。 ### 灵活驾驭内容展示

2025-11-08

如何利用AnQiCMS的`archiveDetail`标签,精细化获取和展示指定文档的详细内容及自定义字段?

在AnQiCMS中管理和展示网站内容,`archiveDetail`标签无疑是核心利器之一。它允许我们深入到每一个具体的文档,无论是文章、产品还是其他自定义类型,从而提取并呈现其详尽信息,甚至包括那些根据业务需求量身定制的自定义字段。理解并灵活运用这个标签,能让我们的网站内容展示更加精准和丰富。 ### `archiveDetail`标签的基础与进阶使用 当我们处在一个文档的详情页面时

2025-11-08