在网站内容的呈现中,数值的展示方式往往直接影响着用户对信息的感知和理解。很多时候,我们希望对数值进行格式化处理,例如显示价格时保留两位小数、展示百分比时加上百分号、或者将大数字进行更易读的格式化。安企CMS为我们提供了强大而灵活的模板引擎,让我们能够在不修改原始数据类型的前提下,轻松实现这些精细化的数值显示需求。

安企CMS的模板引擎采用了类似Django或Blade的语法风格,它通过双花括号 {{变量}} 来输出变量内容,并通过单花括号与百分号 {% 标签 %} 来使用各种标签和逻辑控制。这种设计理念使得前端开发者可以专注于页面展示,而无需深入后端代码调整数据本身。实现数值格式化的关键,就在于灵活运用模板中内置的“过滤器”(Filters)。

通过模板过滤器实现数值的优雅呈现

过滤器是安企CMS模板引擎中一项非常实用的功能,它允许我们对输出的变量值进行各种处理,包括但不限于文本操作、逻辑判断以及我们今天着重探讨的——数值格式化。将数据传入过滤器后,它会返回一个经过处理但原始数据类型不变的新值,完美契合了“在不改变原始数据类型的情况下,仅显示格式化的数值”这一核心需求。

下面,我们将介绍安企CMS中用于数值格式化的几个核心过滤器及其应用。

1. floatformat:精准控制浮点数的小数点位数

floatformat 过滤器是专门为浮点数(小数)设计,它能帮助我们控制小数点后显示的位数。无论是在电商网站展示商品价格,还是在数据报告中呈现精确的百分比,这个过滤器都能派上用场。

基本用法: {{ 变量 | floatformat:位数 }}

  • 当不指定位数时,floatformat 默认会尝试保留一位小数,如果末位是0则不显示小数,同时会进行四舍五入。 例如,如果您的商品价格 product.price 存储为 34.23234{{ product.price|floatformat }} 可能会显示 34.2。 如果 product.price34.00000,它会显示 34。 如果 product.price34.26000,它会显示 34.3

  • 当指定具体位数时,它会严格按照指定的位数显示,并进行四舍五入。 例如,将价格显示为两位小数: {{ product.price|floatformat:2 }} 如果 product.price34.23234,显示为 34.23。 如果 product.price34.00000,显示为 34.00。 如果 product.price34.26000,显示为 34.26

通过 floatformat,您可以确保价格、评分等数值在页面上始终保持统一且易读的格式。

2. stringformat:数值格式化的万能利器

stringformat 过滤器则更为强大和灵活,它能够将数字、字符串等任意值按照您定义的格式模板输出。它的功能类似于Go语言中的fmt.Sprintf(),允许您通过占位符来精确控制输出内容的结构和样式。

基本用法: {{ 变量 | stringformat:"格式定义" }}

  • 整数格式化 (%d): 如果您有一个库存数量 product.stock12345,想在后面加上“件”: {{ product.stock|stringformat:"%d件" }} 将显示 12345件

  • 浮点数格式化和精度控制 (%f%.nf): 结合 %.nf 可以控制浮点数的精度,这与 floatformat 有些相似,但 stringformat 还能添加额外的前缀或后缀。 例如,将价格 product.price (199.998) 格式化为带货币符号的两位小数: {{ product.price|stringformat:"¥%.2f" }} 将显示 ¥199.99

  • 百分比显示: 假设您有一个折扣率 discount.rate0.75,您希望显示为 75%{{ (discount.rate * 100)|stringformat:"%.0f%%" }} 将显示 75%。(注意%%表示输出一个百分号) 如果 discount.rate 直接是 75{{ discount.rate|stringformat:"%d%%" }} 也会显示 75%

stringformat 的灵活性让它成为处理各种数值展示场景的利器,您几乎可以构建任何想要的数值输出格式。

3. stampToDate:时间戳的专属格式化工具

虽然不是严格意义上的“数值”格式化,但时间戳本质上也是一串数字。安企CMS提供了专门的 stampToDate 标签,用于将时间戳转换为可读的日期和时间格式。这同样是在不改变原始时间戳数据的前提下,对数值进行格式化展示。

基本用法: {{ stampToDate(时间戳, "格式") }}

  • 例如,您有一篇文档的创建时间 article.CreatedTime 是一个时间戳 1675862400,您希望显示为 2023年02月09日{{ stampToDate(article.CreatedTime, "2006年01月02日") }} 将显示 2023年02月09日

这里的“格式”字符串遵循Go语言的时间格式化规则,使用特定的参照时间(2006-01-02 15:04:05)来定义输出格式。

总结

安企CMS通过提供一系列功能强大且易于使用的模板过滤器,极大地简化了网站内容的开发和维护。无论是精确控制浮点数的小数点位数,还是将数值封装到自定义的文本格式中,亦或是将时间戳转换为易读的日期,这些过滤器都允许您在模板层面对数据进行“美化”,而无需触碰后端数据的原始形态。这不仅保证了数据的一致性和完整性,也为前端内容展示带来了极大的灵活性和便利性。

常见问题 (