#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 }}