Django 5 для начинающих

Прогресс по курсу:  9/1004

6.8 Реализация конкретно-прикладных шаблонных тегов и фильтров
3 из 3 шагов пройдено

Реализация конкретно-прикладных шаблонных тегов

Django предоставляет следующие вспомогательные функции, которые позволяют легко создавать шаблонные теги:

  • simple_tag: обрабатывает предоставленные данные и возвращает строковый литерал;

  • inclusion_tag: обрабатывает предоставленные данные и возвращает прорисованный шаблон.

Шаблонные теги должны находиться внутри приложений Django.

Внутри каталога приложения blog создайте новый каталог, назовите его templatetags и добавьте в него пустой файл __init__.py.

Создайте еще один файл в той же папке и назовите его blog_tags.py.

Файловая структура приложения blog должна выглядеть, как показано ниже:

Очень важно то, как файл называется. Вы будете использовать имя этого модуля для загрузки тегов в шаблоны.

 

Создание простого шаблонного тега

Давайте начнем с создания простого тега, чтобы получать общее число опубликованных в блоге постов.

Отредактируйте только что созданный вами файл templatetags/blog_tags.py, добавив следующий ниже исходный код:

from django import template
from ..models import Post

register = template.Library()


@register.simple_tag
def total_posts():
    return Post.published.count()

Мы создали простой шаблонный тег, который возвращает число опубликованных в блоге постов.

Для того чтобы быть допустимой библиотекой тегов, в каждом содержащем шаблонные теги модуле должна быть определена переменная с именем register.

Эта переменная является экземпляром класса template.Library, и она используется для регистрации шаблонных тегов и фильтров приложения.

В приведенном выше исходном коде тег total_posts был определен с помощью простой функции Python. В функцию был добавлен декоратор @register.simple_tag, чтобы зарегистрировать ее как простой тег.

Django будет использовать имя функции в качестве имени тега. Если есть потребность зарегистрировать ее под другим именем, то это можно сделать, указав атрибут name, например @register.simple_tag(name='my_tag').

После добавления нового модуля шаблонных тегов потребуется перезапустить сервер разработки, чтобы новые теги и фильтры стали доступны для использования в шаблонах.

Прежде чем использовать конкретно-прикладные шаблонные теги, необходимо сделать их доступными для шаблона с помощью тега {% load %}. Как упоминалось ранее, нужно использовать имя модуля Python, содержащего ваши шаблонные теги и фильтры.

Отредактируйте шаблон templates/blog/base.html, добавив тег {% load blog_tags %} в верхней его части, чтобы загрузить свой модуль шаблонных тегов.

Затем примените созданный вами тег для отображения общего числа постов, как показано ниже:

{% load blog_tags %}
{% load static %}
<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}{% endblock %}</title>
    <link href="{% static "css/blog.css" %}" rel="stylesheet">
</head>
<body>
<div id="content">
    {% block content %}
    {% endblock %}
</div>
<div id="sidebar">
    <h2>My blog</h2>
    <p>
        This is my blog.
        I've written {% total_posts %} posts so far.
    </p>
</div>
</body>
</html>

Для того чтобы отслеживать добавленные в проект новые файлы, нужно перезапустить сервер.

Пройдите по URL-адресу http://127.0.0.1:8000/blog/ в своем браузере. На боковой панели вы должны увидеть общее число постов сайта, как показано ниже:

Шаблонные теги позволяют обрабатывать любые данные и добавлять их в любой шаблон независимо от исполняемого представления. При этом для отображения результатов в своих шаблонах можно выполнять наборы запросов или обрабатывать любые данные.


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

здесь путь правильный указан?

@Дмитрий_Чекмасов, спасибо, исправил.