在网站运营中,我们经常需要动态地展示一些数字信息,比如产品总价、文章阅读量百分比、折扣后的价格等等。安企CMS 提供的模板系统功能强大,它采用了类似 Django 模板引擎的语法,让我们可以在内容展示时轻松实现这些需求,直接在模板中对数字进行基本的算术运算,并将结果显示出来。

掌握模板中的基本算术运算

在安企CMS的模板中,最直接的方式就是在双花括号 {{ }} 中编写算术表达式。这与我们日常使用的计算器功能非常相似,支持加法 +、减法 -、乘法 *、除法 / 以及取模(取余数)% 等基本运算。

想象一下,你可能想在一个页面上显示两个数字相加的结果,或者计算一个数值的百分之多少。这些操作可以直接在模板中完成,例如:

{# 简单的加法 #}
<p>25 + 10 的结果是: {{ 25 + 10 }}</p>

{# 减法运算 #}
<p>50 - 15 的结果是: {{ 50 - 15 }}</p>

{# 乘法运算 #}
<p>5 * 8 的结果是: {{ 5 * 8 }}</p>

{# 除法运算,这里会得到浮点数结果 #}
<p>10 除以 3 的结果是: {{ 10 / 3 }}</p>

{# 整数除法,会得到整数部分 #}
<p>10 整除 3 的结果是: {{ 10 // 3 }}</p>

{# 取模运算,得到余数 #}
<p>10 除以 3 的余数是: {{ 10 % 3 }}</p>

在实际显示时,{{ 10 / 3 }} 会输出 3.3333333333333335,而 {{ 10 // 3 }} 则会输出 3。这意味着在进行除法时,如果你希望得到精确的浮点数结果,通常使用 / 即可;如果只需要整数部分,则可以使用 // 或通过后续的过滤器进行处理。

这些表达式也可以包含括号,以明确运算的优先级,就像你在数学课上学到的一样。比如,计算 (5 + 3) * 2 的结果:

<p>(5 + 3) * 2 的结果是: {{ (5 + 3) * 2 }}</p>

将网站数据融入算术运算

仅仅进行固定数字的运算往往不足以满足我们的需求,网站的魅力在于其内容的动态性。安企CMS 允许我们从后台获取各种数据,并将这些数据中的数字值用于模板中的运算。

假设我们有一个产品详情页,产品的单价是 archive.Price(通过文档详情标签 archiveDetail 获取的字段),并且我们希望计算购买 3 件商品的总价。我们可以这样操作:

{# 假设 archive.Price 是一个数字,比如 29.99 #}
{% archiveDetail productPrice with name="Price" %}
<p>商品单价:¥{{ productPrice }}</p>
<p>购买 3 件商品的总价:¥{{ productPrice * 3 }}</p>

或者,如果你的文档模型中有一个自定义数字字段,例如 Stock(库存),你想要显示库存还剩下多少百分比,可以这样计算:

{# 假设 archive.TotalStock 是一个固定值,archive.CurrentStock 是当前库存 #}
{% archiveDetail totalStockValue with name="TotalStock" %}
{% archiveDetail currentStockValue with name="CurrentStock" %}

{% if totalStockValue > 0 %}
  {% set remainingPercentage = (currentStockValue / totalStockValue) * 100 %}
  <p>总库存:{{ totalStockValue }}</p>
  <p>当前库存:{{ currentStockValue }}</p>
  <p>库存剩余百分比:{{ remainingPercentage|floatformat:2 }}%</p> {# 使用 floatformat 过滤器保留两位小数 #}
{% else %}
  <p>库存信息不可用或总库存为零。</p>
{% endif %}

这里我们引入了一个 {% set %} 标签来定义一个临时变量 remainingPercentage,并使用了 floatformat:2 过滤器来将结果保留两位小数,让显示更整洁。

利用过滤器进行更灵活的运算

安企CMS的模板系统还提供了一些实用的过滤器(Filters),可以帮助我们对数据进行加工和运算。过滤器通过在变量名后添加竖线 | 和过滤器名称来使用。

其中,add 过滤器就非常适合进行简单的加法操作。它不仅可以用于数字相加,甚至可以聪明地处理数字与字符串的混合相加(如果可能的话,它会尝试转换类型,否则会忽略无法转换的部分)。

{# 使用 add 过滤器进行加法 #}
<p>5 加 2 的结果是: {{ 5|add:2 }}</p>

{# 变量与数字相加 #}
{% set baseNum = 10 %}
<p>10 加 7 的结果是: {{ baseNum|add:7 }}</p>

{# 字符串与数字相加(会尝试拼接,如“安企” + 2 = “安企2”) #}
<p>“安企”与 2 相加: {{ "安企"|add:2 }}</p>

有时,从后台自定义字段获取的数值可能被视为字符串。在这种情况下,直接进行算术运算可能会导致错误或不符合预期的结果。为了确保运算的准确性,我们可以使用 integerfloat 过滤器将值明确转换为整数或浮点数:

{# 假设 custom_price_str 是一个字符串“25.50” #}
{% archiveDetail customPriceStr with name="custom_price" %}
<p>字符串价格乘以 2: {{ customPriceStr|float * 2 }}</p> {# 先转换为浮点数再乘 #}

实用技巧与建议

  • 变量赋值({% set %}{% with %}): 当我们需要进行更复杂的计算,或者希望将中间结果存储起来以便后续使用时,{% set %}{% with %} 标签非常有用。它们可以帮助你组织代码,使逻辑更清晰。{% set newVar = someCalculation %} 用于在当前作用域内定义变量,而 {% with %} 则通常用于临时定义一组变量并在 {% endwith %} 结束。
  • 结合条件判断: 结合条件判断 {% if %} 标签,可以使我们的动态展示更加智能。比如,只有当计算结果为正数时才显示,或者根据结果的不同范围显示不同的提示信息。
  • 注意数据类型: 尽管安企CMS的模板引擎在某些情况下会尝试自动转换数据类型,但显式地使用 integerfloat 过滤器来确保参与运算的数据是正确的数字类型,是一个很好的习惯,可以避免潜在的错误。
  • 处理特殊情况: 在进行除法运算时,尤其要留意分母为零的情况。虽然安企CMS的底层Go语言通常能优雅处理,但为了用户体验,你可以在模板中添加条件判断来避免直接显示除以零的结果,例如 {% if totalStockValue > 0 %}

通过灵活运用上述算术运算功能和过滤器,您可以在安企CMS 模板中实现丰富的动态数字展示,大大提升网站内容的交互性和实用性。


常见问题 (FAQ)

1. 为什么我在模板中对数字进行加法运算时,结果是两个数字拼接在一起,而不是它们的和?

这通常是因为参与运算的“数字”被模板引擎识别成了字符串。当字符串执行加法