• 16 Апр
  • 2015
Как сделать собственные шаблонные теги в Django

Чем сложнее проект, тем больше специальных шаблонных тегов хочется иметь в своем арсенале. Для чего это может пригодиться? Например, для вывода звезд рейтинга вашего продукта или комментариев. Вот на этом примере и потренируемся.

Для начала создадим директорию templatetags внутри нашего приложения. Внутрь положем пустой файл __init__.py, чтобы Django понимала, что в этой директории лежат скрипты. Теперь создаем файл шаблонного тега. Назовем его, например, extratags.py.

Давайте разберемся, что должен делать этот тег. В БД лежит оценка каждого комментария, и это целочисленное поле. Python не позволяет итерировать целочисленные значения, поэтому мы не сможем использовать цикл для отображения звезд. В шаблонах Django нет возможности использовать функцию xrange(). Поэтому мы создаем специальный шаблонный тег range, который возвратит в шаблон список значений от 1 до полученного из БД значения. Его то мы и будем итерировать в шаблоне.

Этот код помещаем в файл extratags.py:


from django import template

register = template.Library()


@register.filter(name='range')
def get_range(value):
    return xrange(value)

 Теперь подгружаем в наш шаблон созданный тег и создаем цикл для отрисовки звезд:


{% load extratags %}

{% for star in review.stars|range %}
    {# рисуем звезду #}
{% endfor %}

 Теперь мы можем создавать циклы на основе целочисленных значений, как при использовании функции xrange().

comments powered by Disqus