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 。
感谢您阅读本文,我感谢任何帮助!
答案 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