Почему теги шаблона localize и USE_L10N иногда дают разные результаты?
Согласно Django docs, тег шаблона localize позволяет более тонко контролировать локализацию в шаблонах, чем общая настройка USE_L10N = True.
Однако включение локализации не всегда приводит к такому же результату, как установка USE_L10N = True.
Например,
# USE_L10N = True in settings.py
{% load l10n %}
{{some_datetime_value|date}}
# Date is shown and localized
vs
# USE_L10N = False in settings.py
{% load l10n %}
{% localize on %}
{{some_datetime_value|date}}
{% endlocalize %}
# Date is shown and NOT localized
Почему эти два результата отличаются? И есть ли способ заставить тег localize правильно локализовать в этих случаях?
Как отметил в комментариях Брайан Дестура, это похоже на ошибку Django.
Преобразование объекта datetime в объект date перед передачей его в шаблон может сработать для одного объекта, но будет очень неудобно, если вам придется обращаться к полям модели, которые хранятся в формате datetime (например, в циклах for).
На случай, если кто-то столкнется с той же проблемой, мне помог пользовательский фильтр, преобразующий объект datetime в объект date (на самом деле это то, что должен делать встроенный фильтр date).
custom_tags.py
@register.filter
def get_date(value):
return value.date()
template.html
{% load i10n %}
{% load custom_tags %}
{% localize on %}
{{some_datetime_value|get_date}}
{% endlocalize %}
#localizes the format correctly