20 марта 2012 г.

Новинки Django 1.4, day 7: Templates

Седьмой пост в серии «Django Days», настал черёд рассказать про новые теги и другие вкусности шаблонов.

Тег {% elif %}
Для кого-то это чуть ли не главная фича 1.4 ;) Если у вас сложная логика в шаблонах, то теперь она будет выглядеть чуть по-проще.

Key-value аргументы для пользовательских тегов
Теперь можно использовать key-value аргументы для тегов наряду с обычными позиционными аргументами, а именно:
{% my_tag 123 "abcd" book.title warning=message|lower profile=user.profile %}
Реализуется это всё через привычные args и kwargs:
@register.simple_tag
def my_tag(a, b, *args, **kwargs):
    warning = kwargs['warning']
    profile = kwargs['profile']
    ...
    return ...
assignment-теги
Некоторые теги в отличие от simple_tag, не обязаны выводить что-то в шаблон, им достаточно лишь модифицировать контекст рендеринга шаблона (например, встроенный {% with %}).  Вот как можно использовать подобный тег для вывода времени:
{% get_current_time "%Y-%m-%d %I:%M %p" as the_time %}
The time is {{ the_time }}.
С целью упрощения создания таких пользовательских тегов теперь можно использовать декоратор assignment_tag:
@register.assignment_tag
def get_current_time(format_string):
    return datetime.datetime.now().strftime(format_string)

Контекстные пометки для перевода
В Django 1.3 появилась возможность задавать контекст для переводимых строк с помощью функций pgettext() и ngettext(), что лишь частично решило проблему локализации коротких фраз, которые могут иметь различный перевод в зависимости от контекста. Теперь его можно передать прямо в шаблоне:
{% trans "May" context "month name" %}
{% trans "May" context "verb" %}
{% blocktrans with name=user.username context "greeting" %}Hi {{ name }}{% endblocktrans %}

Тег {% static %}
Файлы из STATICFILES_STORAGE можно теперь отдавать через спецтег:
{% load static from staticfiles %}
<img src="{% static "css/base.css" %}" />
Наиболее полезен новый тег будет тем, кто хранит статику не локально, а в CDN, например, на S3, либо другим нестандартным образом. В остальных случаях этот тег эквивалентен {{STATIC_URL}} перед началом файла.

Также появился новый тип хранилища storage.CachedStaticFilesStorage, позволяющий добавлять к именам файлов из статики их md5-хэш, чтобы гарантированно инвалидировать кэш css и js, картинок и т.п.

Фильтр truncatechars
В это трудно поверить, но только сейчас через 4,5 года в состав фильтров по умолчанию попал truncatechars, обрезающий строку до определенного количества символов и завершающий её многоточием. truncate_words по-прежнему доступен.

It's not the end
На очереди пост про поддержку временных зон, завтра-послезавтра опубликуем.

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

Отправить комментарий