tags:

views:

204

answers:

2

I have the following code in Django:

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

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

It work on some computers in dev mode, but as soon as I try to deploy it on production I get this error:

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

The weird thing is that I can do this on the production server and it will work without any errors:

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

I .. don't get it.i

+3  A: 

On the production server, try

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

instead of

locale.setlocale( locale.LC_ALL, '' )

When you use '', the locale is set to the user's default (usually specified by the LANG environment variable). On the production server, that appears to be 'C', while as a test user it appears to be 'en_CA.UTF-8'.

unutbu
Worked. Thanks !
h3
+1  A: 

http://docs.python.org/library/locale.html#locale.setlocale says that it is not thread-safe, which shouldnt be a problem running the dev server, but could cause you problems running it on a production server in a multi-threaded environment!

lazerscience
I find it a bit exacerbating that I end up talking about threads when I only want to format a number.I think they shouldn't have used wrapped C libraries in first places, it seems to cause more problems than it solve.
h3