【问题标题】:Django template: localize number returned from simple tagDjango模板:本地化从简单标签返回的数字
【发布时间】:2013-05-02 01:40:36
【问题描述】:

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

  • 使用 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() 并且不工作。

任何简单可行的解决方案都值得赞赏。

【问题讨论】:

    标签: python django python-2.7 django-1.5


    【解决方案1】:

    好的,最后,我找到了如何做到这一点。我已经将我的简单标签,特别是返回部分更改为:

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

    floatformat 制作模板以显示格式化的数字,逗号作为小数分隔符。请求了两位小数(floatformat 的第二个参数)。

    【讨论】:

      猜你喜欢
      • 2021-10-09
      • 2016-02-28
      • 1970-01-01
      • 2020-05-02
      • 2013-11-28
      • 1970-01-01
      • 2011-02-26
      • 1970-01-01
      • 2011-07-28
      相关资源
      最近更新 更多