Как запретить Django локализовывать идентификаторы в шаблонах?

#django #localization #django-templates

#django #локализация #django-templates

Вопрос:

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

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

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

 data-id="1235"
  

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

 data-id="1.235"
  

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

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

Комментарии:

1. Вы нашли решение?

2. @Don В то время я был вынужден отключить USE_THOUSAND_SEPARATOR (как я упоминал ниже в #comment6697430_5826535). В конечном счете, система шаблонов Django всегда будет пытаться форматировать целые числа, поэтому вы не можете глобально отключить это.

Ответ №1:

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

Также выполните задание

Ответ №2:

с 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 }}"
  

Комментарии:

1. Это работает так же хорошо, |safe как я упоминал, но я искал способ, при котором не нужно обрабатывать каждый вывод идентификатора. Мне пришлось временно отключить USE_THOUSAND_SEPARATOR , но он также отключает плавающие точки.

Ответ №3:

На самом деле это не ответ на ваш вопрос, но ознакомьтесь с этим разделом docs . В нем говорится использовать {{ |unlocalize }} filter или:

 {% 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 }}