在构建网站时,我们都希望内容能根据不同的页面、不同的数据而灵活变动,而不是一成不变的静态文本。AnQiCMS 凭借其基于 Go 语言的高性能架构和灵活的类 Django 模板引擎,为我们提供了强大的动态内容展示能力。而这一切的核心,都离不开“变量”的定义与使用。
掌握在 AnQiCMS 模板中如何定义和使用变量,就像掌握了开启网站动态活力的钥匙。这不仅仅是技术操作,更是实现内容营销、SEO 优化和用户体验提升的关键一步。
核心:变量的定义与使用基础
AnQiCMS 的模板语法简洁直观,它沿用了类似 Django 模板引擎的风格。最直接的方式,就是使用双花括号 {{ 变量名 }} 来显示动态内容。当系统渲染页面时,它会查找这些花括号中的变量名,并将其替换为实际的数据。
变量的命名通常遵循驼峰命名法,例如 archive.Id 或 archive.Title。这里的 archive 通常代表当前页面所加载的文章、产品等内容实体,而 Id 和 Title 则是该实体所具有的属性。
从系统内置标签获取数据
AnQiCMS 为我们预置了大量的模板标签,这些标签在被调用时,会隐式地将后台配置或数据库中的数据“注入”到模板环境中,供我们以变量的形式使用。
全局站点与联系信息: 如果想在网站的任何位置显示公司名称、联系电话、备案号等全局信息,可以使用
system和contact标签。例如,想显示网站名称:{% system siteName with name="SiteName" %}{{ siteName }}。这里,system标签获取了名为 “SiteName” 的系统配置,并将其赋值给siteName变量,然后我们通过{{ siteName }}将其显示出来。 同样,要显示联系电话,可以这样:{% contact cellphone with name="Cellphone" %}{{ cellphone }}。页面特定信息(TDK): 每个页面的标题(Title)、关键词(Keywords)和描述(Description)对 SEO 至关重要。
tdk标签能动态获取这些信息。比如在<title>标签中显示页面标题:<title>{% tdk with name="Title" siteName=true %}</title>。这里的siteName=true表示会在页面标题后自动加上网站名称,增强品牌识别度。内容详情页: 当我们访问一篇具体的文章或产品页面时,页面主体内容就是最典型的动态信息。
archiveDetail标签用于获取当前文档的详细数据,这些数据可以直接通过archive.属性名的形式调用,比如{{ archive.Title }}会显示文章标题,{{ archive.Content }}会显示文章正文。 例如,在一个文章详情页,我们可以这样展示内容:<h1>{{ archive.Title }}</h1> <div> 发布时间:{{ stampToDate(archive.CreatedTime, "2006-01-02") }} 阅读量:{{ archive.Views }} </div> <div class="article-content"> {{ archive.Content|safe }} </div>这里
archive.Title、archive.CreatedTime和archive.Views都是直接可用的变量。archive.Content后面的|safe是一个过滤器,它告诉模板引擎这段内容是安全的 HTML,不需要进行转义,从而确保富文本编辑器中排版好的内容能正确显示。
在循环中定义和使用变量
网站往往需要展示列表数据,比如文章列表、产品列表等。for 循环标签是处理这类动态内容的利器,它会在每次迭代时,将当前项的数据赋值给一个临时变量。
例如,显示一个文章列表:
{% archiveList archives with type="page" limit="10" %}
{% for item in archives %}
<li>
<a href="{{ item.Link }}">
<h3>{{ item.Title }}</h3>
<p>{{ item.Description|truncatechars:100 }}</p>
<span>发布日期:{{ stampToDate(item.CreatedTime, "2006-01-02") }}</span>
</a>
</li>
{% empty %}
<li>目前还没有任何文章。</li>
{% endfor %}
{% endarchiveList %}
在这个例子中,archives 是 archiveList 标签获取到的文章集合,而 {% for item in archives %} 语句让 item 成为每次循环中的当前文章对象。我们就可以通过 item.Link、item.Title 等来访问每篇文章的属性。item.Description|truncatechars:100 展示了如何使用 truncatechars 过滤器截取描述内容,防止过长。
进阶:在模板内部创建和操作变量
除了从内置标签获取数据,我们还可以直接在模板中声明和操作变量,这为模板设计带来了更大的灵活性。
使用 with 标签定义临时变量
{% with ... %} 标签允许你在一个局部范围内定义临时的变量,这些变量只在该 with 标签的开始和结束之间有效。这在需要为特定区块或 include 进来的模板片段传递参数时非常方便。
{% with headerTitle="我的博客首页" headerKeywords="技术,分享,CMS" %}
<head>
<title>{{ headerTitle }}</title>
<meta name="keywords" content="{{ headerKeywords }}">
</head>
{% endwith %}
这里,headerTitle 和 headerKeywords 只在 with 标签内部可用。如果我们将它们传递给一个公共的 header.html 模板,可以这样写:
{% include "partial/header.html" with title=headerTitle keywords=headerKeywords %}
使用 set 标签声明更灵活的变量
{% set ... %} 标签则提供了更广泛的变量声明能力。它定义的变量在当前模板文件中都是可用的,而不仅仅局限于一个区块,这在进行一些计算或存储中间结果时非常有用。
”`twig {% set greeting = “欢迎来到AnQiCMS的世界!” %}
{{ greeting }}
{#