【问题标题】:Django separate thousands in templateDjango 在模板中分隔数千
【发布时间】:2011-01-17 05:48:10
【问题描述】:

我的模型返回小数 (1234567.50),我似乎无法显示带有千位分隔符的小数。 Django有办法做到这一点吗?我需要创建自己的模板过滤器吗?

谢谢。

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    一种简单的方法是导入locale 并在您的视图函数中进行格式化。

    更容易阅读:http://docs.djangoproject.com/en/dev/topics/i18n/#overview

    对于格式本地化,它只是 需要设置 USE_L10N = True in 你的设置文件。如果设置了 USE_L10N 为 True,Django 将显示数字 和当前格式的日期 语言环境。包括字段 模板上的表示,以及 管理员允许的输入格式。

    【讨论】:

    • Django 1.2 现在有一个 USE_THOUSAND_SEPARATOR 变量,您可以在 settings.py 中设置。见docs.djangoproject.com/en/dev/ref/settings/…。这种方法比使用 intcomma 过滤器要容易得多。一旦我将 USE_L10N 和 USE_THOUSAND_SEPARATOR 都设置为 True,我想用千位分隔符显示的数字就会自动开始工作,无需模板编辑。更新:此方法似乎适用于 ints 但不适用于 longs :(
    • USE_L10N 不像这里stackoverflow.com/questions/7918523/django-localisation 那样工作时会发生什么
    • USE_THOUSAND_SEPARATOR 是邪恶的,因为它会转换其他值。例如使用文件浏览器时,image.width 将被格式化。当使用带点的千位时,这将导致 width="1.200" height="800"... 1.2 而不是 1200
    • 解决方案是什么?如何仅对特定数字字段使用千位运算符?
    【解决方案2】:

    您可以使用intcomma 过滤器,但我认为它不适用于 Decimal 对象,它适用于 Decimal 对象。 你必须先转换成浮点数/字符串。

    【讨论】:

    • 我不知道它适用于 Decimal 对象。更新了答案。
    • 别忘了您需要{% load humanize %} 才能使用intcomma。您也可以将其与floatformat 结合使用以更改显示的小数位数。
    • 您甚至可以将 intcommafloatformat 结合使用,从而获得两者的好处(intcomma 用于千位分隔符,floatformat 用于最小或没有点分隔符)。
    • 为了使用 {% load humanize %} 您必须将其激活为 INSTALLED_APPS,请参阅docs.djangoproject.com/en/3.0/ref/contrib/humanize
    【解决方案3】:

    在settings.py中为已安装的应用添加humanize,并在模板中加载。

    {% load humanize %}
    {{ my_num|intcomma }}
    

    【讨论】:

      猜你喜欢
      • 2011-07-26
      • 2020-01-17
      • 2019-09-30
      • 2010-11-17
      • 1970-01-01
      • 2014-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多