Django number_format不起作用

时间:2016-04-07 04:03:13

标签: django python-3.x

我试图使用intcomma格式化模板中的数字,但它无法正常工作。

{%load humanize%}
{%blocktrans with val=myvalue|intcomma%}The number is {{val}}{%endblocktrans%}

经过一番搜索,我发现django.utils.formats.number_format不是函数。以下是我的测试:

corpweb@56944bf480d1:~$ ./manage.py shell
Python 3.4.4 (default, Feb 17 2016, 02:50:56) 
[GCC 4.9.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> import locale
>>> from django.utils.formats import number_format
>>> val=123456789
>>> number_format(val,force_grouping=True)
'123456789'
>>> locale.getlocale()
('en_US', 'UTF-8')
>>> 

我有什么设置错误吗?

2 个答案:

答案 0 :(得分:1)

在Django app流程之外渲染模板或使用number_format时,不会激活翻译模块。关于如何在自定义管理命令中启用翻译的Here are a few notes and instructions

要使shell示例正常工作,我们只需要激活翻译模块:

(venv) $ ./manage.py shell
Python 3.6.4 (default, Mar  1 2018, 18:36:50)
>>> from django.utils.formats import number_format
>>> from django.utils import translation
>>> translation.activate('en-us')
>>> number_format(50000, force_grouping=True)
'50,000'

上面的关键字是:translation.activate('en-us')

答案 1 :(得分:0)

我猜你的设置一切正常。只需将USE_L10N = True设置为settings.py,如果设置为False,就像@Tim Schneider所提到的那样,你最好像@ Leonard2所提到的那样{{ val|intcomma }}尝试它,它必须有效。并且正如提到的那样here确保:

  

要激活这些过滤器,请添加' django.contrib.humanize'到您的INSTALLED_APPS设置。