Пользовательские теги шаблона
Существуют два типа тегов: Simple tags и Inclusion tags
Simple tags
Для того чтобы многократно не вызываь однотипные функции (например: categories = Category.objects.all()
) при выводе различных частей модуля (в файле views.py
) мы можем использовать пользовательские теги шаблона
Для создания пользовательского тега шаблонов необходимо в папке необходимого модуля (Например news
) добавить папку templatetags
с пустым файлом __init__.py
и уже в этой папке создаем файл тегов (news_tags.py
) со следующим кодом:
from django import template
from news.models import Category
register = template.Library() # регистрируем тэг
@register.simple_tag(name='get_list_categories')
def get_categories():
return Category.objects.all()
Далее в необходимом шаблоне мы вызываем наш новый файл {% load news_tags %}
и присваеваем переменной значение нужной нам функции {% get_categories as categories%}
:
{% load news_tags %}
<div class="list-group">
{% get_list_categories as categories%}
{% for item in categories %}
<a href="{% url 'category' item.pk %}" class="list-group-item list-group-item-action">{{ item.title }}</a>
{% endfor %}
</div>
После этого мы уже можем из файла views.py
удалить categories = Category.objects.all()
Inclusion tags
В этом случае мы уже сами рендерим необходимый шаблон. Для примера создадим в папке news/templates/news/list_categories.html
:
<div class="list-group">
{% for item in categories %}
<a href="{% url 'category' item.pk %}" class="list-group-item list-group-item-action">{{ item.title }}</a>
{% endfor %}
</div>
В файле news_tegs.py
:
@register.inclusion_tag('news/list_categories.html') # Указываем путь до шаблона
def show_categories():
categories = Category.objects.all()
return {'categories': categories }
Затем в нужном месте шаблона выводим уже отрендеренную часть шаблона: {% show_categories %}
Также мы можем передавать аргументы в Inclusion tags:def show_categories(arg1 = 'Hello', arg2 = 'World'):
. Тут мы задаем стандартные значения переменным.
Изменить переменные можно так: {% show_categories arg2='User' %}
Выводятся данные переменные в шаблоне следующим образом: {{ arg1 }}