使用Python(Django)格式化货币时出现问题

2024-05-17 05:43:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我在Django有以下代码:

import locale 
locale.setlocale( locale.LC_ALL, '' )

def format_currency(i):
    return locale.currency(float(i), grouping=True)

它在某些计算机上以开发模式工作,但一旦我尝试将其部署到生产环境中,就会出现以下错误:

Exception Type: TemplateSyntaxError
Exception Value: Caught ValueError while rendering: Currency formatting is not possible using the 'C' locale.
Exception Location: /usr/lib/python2.6/locale.py in currency, line 240

奇怪的是,我可以在生产服务器上执行此操作,并且它不会出现任何错误:

python manage.py shell
>>> import locale 
>>> locale.setlocale( locale.LC_ALL, '' )
'en_CA.UTF-8'
>>> locale.currency(1, grouping=True)
'$1.00'

我。。不明白。我


Tags: django代码pyimporttrueformatdef错误
3条回答

在生产服务器上,尝试

locale.setlocale( locale.LC_ALL, 'en_CA.UTF-8' )

而不是

locale.setlocale( locale.LC_ALL, '' )

当您使用''时,语言环境被设置为用户的默认值(通常由LANG环境变量指定)。在生产服务器上,它似乎是“C”,而作为测试用户,它似乎是“en_C a.UTF-8”。

我遇到了一个类似的问题,我通过PyCharm(JetBrain基于IDE a 12的IDE)运行Django应用程序,它得到了相同的问题

Currency formatting is not possible using the 'C' locale.

在那里,运行python manage.py runserver运行得很好。在深入研究之后,我发现了一个关于环境变量LC_ALLhere的线程讨论

如果您编辑“Run Configration”并添加一个环境变量,它就会工作得很好。见下面的截图。希望这能帮助遇到同样问题的人。 Locale Setting Environment Variable

http://docs.python.org/library/locale.html#locale.setlocale说它不是线程安全的,这不应该是运行dev服务器的问题,但可能会导致在多线程环境中的生产服务器上运行它的问题!

相关问题 更多 >