Login

Currency filter

Author:
kljensen
Posted:
January 17, 2008
Language:
Python
Version:
.96
Score:
2 (after 4 ratings)

Formats a number in the local currency format. E.g., if foo is equal to 49277, then

{{ foo|currency }}

would print

$49,277

If your locale is the U.S. You can use this filter in your templates as described in the Django documentation

1
2
3
4
5
6
7
8
9
from django import template
import locale
locale.setlocale(locale.LC_ALL, '')
register = template.Library()
 
 
@register.filter()
def currency(value):
    return locale.currency(value, grouping=True)

More like this

  1. Template tag - list punctuation for a list of items by shapiromatron 2 months, 2 weeks ago
  2. JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 2 months, 3 weeks ago
  3. Serializer factory with Django Rest Framework by julio 9 months, 2 weeks ago
  4. Image compression before saving the new model / work with JPG, PNG by Schleidens 10 months, 1 week ago
  5. Help text hyperlinks by sa2812 11 months ago

Comments

MasonM (on July 24, 2008):

Cool, I didn't know about the locale module. I had to change line 3 to "locale.setlocale(locale.LC_ALL, 'en_US')" for this to work on a shared server I use.

#

cornbread (on August 14, 2008):

This works great on my ubuntu-hardy laptop but I can't get it to work on my ubuntu-gutsy server.

I get some kind of a Locale C error.

#

cornbread (on August 18, 2008):

FIGURED IT OUT!!!

I had to set up the language pack on my ubuntu-server... Apparently this doesn't get done by default on the server version of ubuntu.

sudo ./install-language-pack en_US then restart x and you're golden.

#

gourneau (on September 21, 2008):

Thanks for this filter.

I also had to use change line 3 to

"locale.setlocale(locale.LC_ALL, 'en_US')"

#

dougal (on March 12, 2009):

hmm this doesn't seem to be working for me. Nothing is displayed on the page?

#

dougal (on March 12, 2009):

Not really sure why but I had to change line 9 to;

return locale.currency(value, symbol=False, grouping=True)

and then I added the GBP symbol (£) myself. Otherwise nothing was ever displayed.

#

astur (on August 14, 2009):

Hm... sometimes 'value' in context may be string. That will be better, imho:

return locale.currency(float(value), grouping=True)

#

backdoc (on May 15, 2010):

My code above lost its formatting. The line numbers are included. So, maybe you can decipher it.

#

lablinux (on November 26, 2010):

i modify your snip to have the money simbol:

from django.utils.translation import ugettext

from django.utils.safestring import mark_safe

I use first import to translate the simbol money (in my django.po)

msgid "currency"

msgstr "\€"

I use the second import to transform "\&amp\€" to "\€"

and return this

return mark_safe( '%s %s' %(locale.currency(value, symbol=False, grouping=True), ugettext('currency')) )

{"1234.56"|currency} return 1.234,55 €

#

mferreira (on August 21, 2011):

I used the current configured language for the locale. Here's what worked for me:

from django import template
from django.utils import translation
import locale
locale.setlocale(locale.LC_ALL, translation.to_locale(translation.get_language()))

register = template.Library()

@register.filter_function
def currency(value):
    return locale.currency(value, grouping=True)

#

Please login first before commenting.