如何在Django模板中添加一个字符

时间:2012-11-30 07:24:53

标签: python django google-app-engine django-templates

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等。我发现的最接近的是添加内置功能{{ value|add:"2" }},因此{{ 4|add:"2" }}会为您提供 6

感谢您阅读本文,我感谢任何帮助!

3 个答案:

答案 0 :(得分: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提供价值。

有关如何编写的更多帮助,请注册模板过滤器here

答案 1 :(得分:2)

  

问题是我正在制作一个小型网店。所以所有的值都必须用美分表示(在服务器和东西中)。但对于一个客户来说,他们更容易用美元来看待它

然后我认为最好的妥协是create a filter

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 }}

答案 2 :(得分: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英镑(这是因为我的区域设置为'en_GB.UTF-8',因此您的输出可能会有所不同。

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

locale.format('%0.0f', self.price / 100, grouping=True)
相反,在这个例子中,这将返回1,123。

在此处详细了解区域设置:http://docs.python.org/2/library/locale.html