在网站运营和内容管理中,我们常常需要根据特定的条件来灵活地展示内容,或者在模板的某个环节临时处理和存储一些数据。AnQiCMS 提供了功能强大且易于上手的模板引擎,它借鉴了 Django 模板的语法,让我们可以方便地定义和使用临时变量,从而实现对页面内容的精细化控制。
AnQiCMS 的模板文件采用 .html 后缀,并支持 Django 模板引擎的标签标记方式。变量通常使用双花括号 {{变量}} 来输出,而条件判断、循环控制等逻辑标签则使用单花括号和百分号 {% 标签 %} 进行定义。理解这两种基本语法是利用临时变量控制显示的基础。
AnQiCMS 模板中的变量定义方法
在 AnQiCMS 模板中,主要有两种方式可以定义临时变量:{% with %} 标签和 {% set %} 标签。它们各有特点,适用于不同的场景。
使用 {% with ... %} 标签定义临时变量
{% with ... %} 标签允许你在一个特定的代码块内定义一个或多个临时变量。这些变量只在该 with 标签包裹的区域内有效,一旦超出这个区域,变量就会失效。这种局部作用域的特性使得 with 标签非常适合在需要临时计算或传递数据给嵌套模板时使用,从而避免变量污染全局作用域。
它的基本语法是:{% with 变量名="值" %},并且需要以 {% endwith %} 来结束这个代码块。
例如,如果你有一个公共的页头模板 partial/header.html,需要在不同的页面显示不同的标题和关键词,你可以这样使用 with 标签:
{# index.html 页面中 #}
{% with pageTitle="AnQiCMS首页 - 企业内容管理专家" pageKeywords="AnQiCMS, 企业建站, 内容管理" %}
{% include "partial/header.html" with title=pageTitle keywords=pageKeywords %}
{% endwith %}
{# product.html 页面中 #}
{% with pageTitle="AnQiCMS产品详情 - 产品模型" pageKeywords="AnQiCMS产品, 内容模型, 解决方案" %}
{% include "partial/header.html" with title=pageTitle keywords=pageKeywords %}
{% endwith %}
{# partial/header.html 模板内容 #}
<head>
<title>{{ title }}</title>
<meta name="keywords" content="{{ keywords }}">
{# 其他页头内容 #}
</head>
在这个例子中,pageTitle 和 pageKeywords 变量在各自的 with 块中被定义,并通过 include 标签传递给了 header.html,使得 header.html 可以使用这些临时变量来渲染页面标题和关键词。
使用 {% set ... %} 标签定义变量
{% set ... %} 标签提供了一种更直接、更灵活的方式来定义变量。通过 set 定义的变量可以在当前模板的任何位置(包括其后的所有块)使用,直到当前模板渲染结束。这使得 set 适用于存储需要在模板中多次引用或进行复杂处理后得到的值。
它的基本语法是:{% set 变量名 = 表达式 %}。
例如,你可能需要对从后台获取的文章标题进行截断处理,或者将多个字符串拼接起来,然后将结果存储在一个变量中方便多次使用:
{# 获取原始文章标题 #}
{% set originalTitle = archive.Title %}
{# 使用过滤器截断标题并赋值给一个新的变量 #}
{% set shortTitle = originalTitle|truncatechars:50 %}
{# 拼接字符串创建完整链接描述 #}
{% set fullLinkText = "点击查看更多关于"|add:shortTitle|add:"的详情" %}
<h1 title="{{ originalTitle }}">{{ shortTitle }}</h1>
<p><a href="{{ archive.Link }}">{{ fullLinkText }}</a></p>
在这个例子中,shortTitle 和 fullLinkText 都是通过 set 定义的临时变量,它们使得代码更加简洁,逻辑更加清晰。
临时变量如何控制显示
临时变量的强大之处不仅在于数据存储,更在于它们能够与 AnQiCMS 模板引擎的各种逻辑标签结合,灵活地控制页面元素的显示与行为。
1. 利用条件判断 ({% if ... %}) 控制内容显隐
最常见的应用就是结合 if 标签,根据变量的真假或其值进行比较,来决定是否显示某个内容块。
假设我们希望在文章的浏览量达到一定数量时