在使用安企CMS构建网站时,模板是实现内容动态展示的关键。我们经常会在模板文件中看到两种特殊的语法结构:{{变量}} 和 {% 标签 %}。虽然它们都与数据的显示和处理有关,但各自扮演的角色和使用方式却大相径庭。理解它们之间的区别,是高效利用安企CMS模板的第一步。
{{变量}}:直接输出动态内容的占位符
想象一下,{{变量}}就像是网页上的一个填空题。它的主要作用是将后端传递过来的数据直接输出到网页上。当您希望在页面上展示文章标题、网站名称、用户评论等动态信息时,就会使用这种语法。
例如,如果您想在页面上显示当前文章的标题,通常会看到这样的写法:{{archive.Title}}。这里的 archive 可能是一个代表当前文章的对象,而 Title 则是这个文章对象的标题属性。同样地,要显示网站备案号,您可以直接使用 {{system.SiteIcp}}。通过点号(.),我们可以层层深入地访问对象的属性。
值得一提的是,变量在输出前还可以通过过滤器(filters)进行加工处理,例如将文本截断、转换大小写、格式化日期等。例如,{{ item.Title|truncatechars:10 }} 会将文章标题截取前10个字符并输出。而像 {{stampToDate(item.CreatedTime, "2006-01-02")}} 这样的写法,虽然看上去像函数调用,它仍然是在变量的基础上,通过一个内置的函数对其值(时间戳)进行格式化,最终输出处理后的变量内容。这些过滤器让变量的输出更加灵活多样,能够满足各种展示需求。
{% 标签 %}:控制逻辑与获取复杂数据的指令
相比之下,{% 标签 %}则更像是一条条指令或者一个功能模块。它不直接输出数据,而是用于控制模板的逻辑结构、执行特定操作或者获取复杂的数据集合。它的核心在于“控制”和“功能”。
{% 标签 %}的用途非常广泛,例如:
- 逻辑判断:当您需要根据某个条件决定是否显示某段内容时,可以使用
{% if 条件 %}...{% endif %}。例如,{% if archive.Id == 10 %}这是文档ID为10的文档{% endif %}会在文档ID为10时显示特定内容。 - 循环遍历:当您需要遍历一个列表或数组,并对其中每个项目进行重复渲染时,会用到
{% for item in list %}...{% endfor %}。例如,{% for item in archives %}可以循环显示文章列表中的每一篇文章。 - 数据获取与处理:安企CMS提供了丰富的内置标签来获取特定类型的数据集合。比如,
{% navList navs %}标签用来获取网站的导航列表,{% archiveList archives with type="page" %}则用于获取带分页的文章列表。这些标签在获取数据后,通常需要配合{% for %}循环来遍历并使用{{变量}}输出其中的具体内容。 - 其他辅助功能:还有一些标签用于模板的组织结构,例如
{% include "partial/header.html" %}用来引入其他模板文件片段,{% extends 'base.html' %}用于模板继承等。
这些标签往往成对出现,例如 {% for %} 总是以 {% endfor %} 结束,{% if %} 总是以 {% endif %} 结束,清晰地界定了它们的作用范围。
核心区别:内容与指令
从根本上说,{{变量}} 和 {% 标签 %} 的核心区别在于它们扮演的角色:
{{变量}}的任务是展示数据。它是一个纯粹的输出机制,把后端提供的值直接显示在页面上,或者经过简单的过滤处理后再显示。{% 标签 %}的任务是执行指令、控制逻辑或获取复杂数据。它是一个功能性的结构,用于构建页面的逻辑骨架、处理数据流向,而不是直接显示某个具体的值。
简单来说,{{变量}}是内容的具体体现,而{% 标签 %}是处理内容、组织内容、决定内容何时何地出现的工具和规则。掌握了这两种语法的精髓,就能更自如地驾驭安企CMS的模板系统,无论是进行简单的内容展示,还是构建复杂的动态页面,都能得心应手,让网站运营事半功倍。
常见问题 (FAQ)
问:{{变量|过滤器}} 和 {% 标签 参数 %} 都能对数据进行处理,它们有什么不同?
答: {{变量|过滤器}} 主要针对已存在的单个变量值进行格式化或转换,它的作用是美化和调整数据的显示形式。比如,将一长段文章简介截短,或者将时间戳转换为易读的日期格式。它的处理范围通常局限于该变量自身的值。
而 {% 标签 参数 %} 的功能更广泛,它可能用于获取数据(例如 archiveList 获取文章列表)、执行复杂的逻辑判断(例如 if 语句)、或者生成结构化内容(例如 pagination 生成分页导航)。其作用是组织和控制内容的展示方式,有时也包含内部的数据处理逻辑,但其核心是“功能”或“控制”,而非仅仅针对单一变量的“格式化”。
问:所有标签都需要 {% end标签 %} 吗?
答: 并非所有标签都需要结束标签。通常,用于控制逻辑流(如 if、for)或处理复杂数据集合(如 navList、archiveList)的标签需要对应的结束标签来界定其作用范围。但有些标签,如 {% system %} 或 {% contact %}(当它们直接输出字段值时),或者像 {% lorem %} 这种生成随机内容的标签,就不需要结束标签。具体是否需要结束标签,通常在AnQiCMS的标签使用文档中会有明确说明。
问:我可以自定义新的{{变量}}或{% 标签 %}吗?
答: 作为普通用户,您通常不能直接在模板文件中自定义新的核心 {{变量}} 或 {% 标签 %} 语法本身。{{变量}}的值通常由后端代码提供,而 {% 标签 %} 则是系统内置的控制结构或功能模块。
不过,安企CMS提供了“内容模型自定义字段”以及“自定义设置参数”的功能,您可以利用这些在后台定义的字段来扩展 {{变量}} 的内容,比如为文章添加一个“作者简介”的自定义字段,然后在模板中通过 {{archive.AuthorIntro}} 来调用。或者通过组合现有标签和过滤器来实现更个性化的展示需求,例如先用 {% archiveList %} 获取文章列表,再用 {% for %} 循环遍历,并通过 {{ item.Title|upper }} 来显示大写标题,实现定制化效果。