0

Django 模板语言有很多特性: https ://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs

但我一直很难找到一个。我在 python 中有一个字典,它被发送到 HTML 文档。

字典:hello = {'a':100, 'b':200, 'c':300, etc:etc}

在 HTML 文件中,如果我这样做:输出{{a}}数字100 。

现在我想知道,是否可以使用 Django 模板为100和所有其他值添加一个字符。所以就像一个过滤器,将输出从100 200 300 等变为10a0 20a0 30a0 等甚至1.00 2.00 3.00 等。我发现最接近的是 add 内置功能{{ value|add:"2" }},所以{{ 4|add:"2" }}会给你6

感谢您阅读本文,我将不胜感激!

4

3 回答 3

2

如果您真的想在模板中执行此操作,可以尝试以下方法:

 {% for d in a|make_list %}{{d}}{%if forloop.counter == 1 %}.{%endif%}{%endfor%}

但这很丑!

我建议编写一个简单的模板过滤器来适当地转换值。

例如:

# sample filter
def todollars(value):
    val = int(value)
    return "%.2f" % val/100.0

在模板中将其用作:

{{ a|todollars }}

这会给你价值,1.00当价值是100

更多关于如何编写的帮助,在此处注册模板过滤器。

于 2012-11-30T08:32:51.133 回答
2

问题是我正在做一个小型网络商店。因此,所有值都必须以美分表示(在服务器和其他东西中)。但对于客户来说,他们更容易看到美元

然后我认为最好的折衷方案是创建一个过滤器

from django import template
from django.template.defaultfilters import stringfilter

register = template.Library()

@register.filter
@stringfilter
def dollars(value):
    strng = "%d" % value
    return strng[:-2]+'.'+strng[-2:]

在模板中,您可以指定

{{ a|dollars }}
于 2012-11-30T08:35:39.363 回答
1

如上面评论中所述,您确实应该考虑在您的视图或模型中执行此操作(这将是我的偏好)。

例如:

在您的模型中

import locale
locale.setlocale(locale.LC_ALL, '')

class Product(models.Model):
    ...
    price = models.IntegerField(...)   # hundredths of a unit
    ...

    def human_price(self):
        return locale.currency(self.price / 100, grouping=True)

在您的模板中:

{{ object.human_price }}

如果您的产品价格为 1123.14159,那么您的输出将是 1,123.14 英镑(这是 GBP,因为我的语言环境是“en_GB.UTF-8”,您的可能会有所不同。

如果您只想要整个部分,您可以使用:

locale.format('%0.0f', self.price / 100, grouping=True)

相反,在本例中这将返回 1,123。

在此处阅读有关语言环境的更多信息:http: //docs.python.org/2/library/locale.html

于 2012-11-30T08:27:11.033 回答