У меня есть следующий код в Django:
import locale
locale.setlocale( locale.LC_ALL, '' )
def format_currency(i):
return locale.currency(float(i), grouping=True)
Это работает над некоторыми компьютерами в dev режиме, но как только я пытаюсь развернуть его на производстве, я получаю эту ошибку:
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'
Я.. не получайте it.i
На производственном сервере попробуйте
locale.setlocale( locale.LC_ALL, 'en_CA.UTF-8' )
вместо
locale.setlocale( locale.LC_ALL, '' )
. При использовании ''
локаль устанавливается по умолчанию пользователя (обычно указывается LANG
переменная среды). На производственном сервере это выглядит как «C», в то время как для тестового пользователя это выглядит как «en_CA.UTF-8».
http://docs.python.org/library/locale.html#locale.setlocale говорит, что он не является потокобезопасным, что не должно быть проблемой при запуске сервера разработки, но может вызвать проблемы с запуском это на производственном сервере в многопоточной среде!