Как создать свой темплейттег - django templatetags inclusion_tag
При разработке нового проекта стал вопрос, как реализовать систему баннеров на сайте? Согласно дизайну сайта на главной странице было предусмотренно расположение пяти баннеров разных размеров. На других страницах так же было предусмотрен вывод нескольких баннеров большего размера.
Подумав над этой задачей я пришел к выводу, что это можно сделать двумя способами: 1 через контекстный процессор; 2 с помощью своего templatetag.
Если делать это с помощью контекстного процессора, то пришлось бы непосредственно в самом шаблоне выводить переменные баннеров, это не самый лучший способ на мой взгляд т.к. нужно было бы на каждой странице каждый раз когда нужно изменить или заменить баннер искать его код и заменять.
В общем остановился на создании своего темплейт тега (templatetag). Мне показалось, что так будет удобней и лаконечней в плане кода. И так приступим к созданию своего темплейта для вывода баннеров на разных страницах сайта.
Что нам нужно будет сделать?
1. В своем приложении создать катлог templatetags;
2. В каталоге templatetags создаем модуль __init__.py чтоб python понимал, что это модуль питона.
3. Так же в templatetags создаем модуль banners.py тут мы будем писать вьюхи наших баннеров и каждое имя вьхи будет именем нашего шаблонного тега.
4. В файле banner.py напишем такой код
from django import template
from info.models import Banners # Импортируем модель баннера
register=template.Library()
@register.inclusion_tag('info/center_big_banner_tpl.html')
def center_big_banner():
banners = Banners.objects.get(id=8)
return {'banners': banners}
5. В каталоге templates вашего приложения создаем шаблон для баннера к пирмеру как в моем случае это center_big_banner_tpl.html
6. В шаблон center_big_banner_tpl.html вставляем кусок html кода баннера я например его вырезал из шаблона главной страницы.
{% if banners.is_active == True %}
<div class="col-xs-12">
<div class="banner">
<a href="{{ banners.links }}"><img src="{{ banners.images.url }}" alt="Product Banner"></a>
</div>
</div>
{% else %}
<p>No banner!</p>
{% endif %}
7. Выводим этот блок на главной странице или на любой другой таким образом. В шаблоне, где нужно отобразить этот баннер нужно подгрузить модуль banner.py этим тегом {% load banner %} . В месте, где должен быть баннер вставляем наш templatetag в моем случае это {% center_big_banner %} - это имя функции из нашего модуля banner.py.
Все таким образом мы можем подгружать в любой шаблон сайта наш модуль {% load banner %} и выводить сам баннер шаблонным тегом {% center_big_banner %} в любом месте где это возможно.
Ваши комментарии
Комментарии могут оставлять только зарегистрированые пользователи!