Django模板:localalize从简单标签返回的数字



我希望这个问题不在这里,我已经谷歌了很长时间,没有找到任何东西。我在模板中格式化数字有问题,但不知何故特别。也许,这是整个问题如何调用过滤器从简单标签返回的值。所以,首先,一些事实:

  • 使用python 2.7和Django 1.5
  • 在捷克语中,我们使用逗号","作为小数分隔符,并可选择使用空格"作为千位分隔符(更常见的是不使用千位分隔符)。
  • 正常情况下,{{ price }}的写数打印为16,0

由于某些原因,我不得不在模板中处理数字:

{% count_basic price.leafletPrice.price product.amount product.amount_unit product.category.basic_amount product.category.basic_amount_unit %}

count basic是简单的标签:

from django import template
register = template.Library()
@register.simple_tag
def count_basic(price, product_amount, product_unit, category_amount, category_unit):
    if product_unit == 'mililiter' or product_unit == 'gram':
        return (float(price) / product_amount) * 1000
    else:
        return float(price) / product_amount

结果不打印为16.0。我已经将settings.py中的l10n设置为True:

USE_I18N = True
USE_L10N = True

我也发现"人性化"作为工作,但首先,我不知道如何调用简单的标签/过滤器从另一个简单的标签返回值(也许使用with ?),其次,如果它是正常的数字工作,为什么不从简单标签返回的数字?号码退回得不好吗?应该转换吗?我也试过返回值为Decimal(),但不工作。

好了,我终于知道怎么做了。我已经改变了我的简单标签,特别是返回部分为:

from django.template.defaultfilters import floatformat
return floatformat(float(price) / product_amount, 2)

floatformat使模板显示格式化的数字,以逗号作为小数分隔符。

最新更新