Настройка локали Django в Linux и Windows для форматирования чисел - PullRequest
0 голосов
/ 14 марта 2011

У меня есть пользовательский тег шаблона Django

@register.filter("numformat")  
@stringfilter
def numformat(value, uLocale=''): 
    if uLocale.count('%') > 0 :
        return str((float(value)) *100) + "%"
    uLocale = uLocale.encode('utf8').strip("%")
    try :
        locale.setlocale(locale.LC_ALL, uLocale)
    except :
        return str(locale.format('%f',float(value), True)) + ' Unknown loacale '+uLocale
        locale.setlocale(locale.LC_ALL, "")
    return str(locale.format('%f',float(value), True)) + ' in loacale '+uLocale

И он вызывается в файле шаблона как

{% if val_i.NumberFormat %}
    {{ val_i.value|urldecode|numformat:val_i.NumberFormat }}
{% else %}
    {{ val_i.value|urldecode }}
{% endif %}

Значение val_i.NumberFormat равно:

  • deu_deu в Windows

  • de_DE в Linux

Проблема в том, что код работает только в Windows , а не в Linux .Есть идеи?

1 Ответ

2 голосов
/ 15 марта 2011

Использование setlocale () таким способом может оказаться проблематичным, особенно из-за потоков (IIRC, setlocale () применяется во всей программе и должен вызываться перед порождением новых потоков). babel (http://babel.edgewall.org/) делает то, что вы пытаетесь достичь, и работает с Django.

...