Как запретить Django локализовать идентификаторы в шаблонах? - PullRequest
12 голосов
/ 28 апреля 2011

Я недавно обновился до Django 1.2.5, и теперь у меня проблемы с локализацией, особенно с форматированием чисел.Например, в некоторых шаблонах я печатаю следующие образцы:

data-id="{{ form.instance.id }}"

Который в случаях> = 1000, используется для оценки:

data-id="1235"

Но теперь это фактически приводит к (мойлокализация - это pt-BR, наш десятичный разделитель - точка):

data-id="1.235"

Что, конечно, не найдено, когда я впоследствии запрашиваю базу данных по ID.Использование фильтра |safe решает проблему, но я не хочу находить все идентификаторы во всех шаблонах и сохранять их.

Обычно я локализую только плавающие точки , а не целые числа..Я не хочу отключать L10N, потому что все остальные форматирования работают нормально. Есть ли способ сделать это различие в локализации Django? Принимается любое другое решение.

Ответы [ 3 ]

10 голосов
/ 17 декабря 2011
data-id="{{ form.instance.id|safe }}"

Также сделайте работу

6 голосов
/ 29 апреля 2011

с django 1.2:

data-id="{{ form.instance.id|stringformat:'d' }}"

или с django 1.3:

{% load l10n %}

{% localize off %}
    data-id="{{ form.instance.id|stringformat:'d' }}"
{% endlocalize %}

или (также с django 1.3):

data-id="{{ form.instance.id|unlocalize }}"
0 голосов
/ 28 апреля 2011

Это на самом деле не отвечает на ваш вопрос, но проверьте этот раздел docs.В нем сказано использовать {{ |unlocalize }} фильтр или:

{% localize on %}
    {{ value }}
{% endlocalize %}

{% localize off %}
    {{ value }}
{% endlocalize %}

Возможно, есть лучший способ, но я думаю, что вы могли бы написать метод, который дает вам идентификатор в виде строки в вашей модели для каждой модели, которую выпытаются отобразить идентификатор в шаблоне.

class MyModel(models.Model):
    pass

    def str_id(self):
        return u'%s' % self.id

в вашем шаблоне:

{{ form.instance.str_id }}
...