Рубрики
Без рубрики

Создание Пользовательских Тегов Шаблонов В Приложении Django

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

Автор оригинала: Hitesh Garg.

Django предлагает множество встроенных тегов шаблонов, таких как {% if %} или {% block %}. Вы использовали несколько из них в своих шаблонах.

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

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

  • simple_tag : Обрабатывает данные и возвращает строку
  • inclusion_tag : Обрабатывает данные и возвращает отрисованный шаблон
  • assignment_tag : Обрабатывает данные и устанавливает переменную в контексте

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

Пусть Код начинается

Внутри вашего каталога django application создайте новый каталог, назовите его templatetags и добавьте пустой __init__.py файл к нему. Создайте другой файл в той же папке и назовите его custom_tags.py . Файловая структура приложения django должна выглядеть следующим образом:

  djangoapp/
      __init__.py
      models.py
      ...
      templatetags/
          __init__.py
          custom_tags.py

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

  1. Простой тег: Мы начнем с создания простого тега для получения общего количества объектов в нашей модели с именем Ваша модель . Редактировать custom_tags.py файл, который вы только что создали, и добавьте следующий код:
  from django import template
  register = template.Library()

  from ..models import YourModel

  @register.simple_tag
  def any_function():
  	return YourModel.objects.count()

Как уже упоминалось выше, он обрабатывает данные и возвращает строку. Каждый модуль templatetags должен содержать переменную с именем register, чтобы быть допустимой библиотекой тегов. Эта переменная является экземпляром шаблона.Библиотека и она используется для регистрации ваших собственных тегов шаблонов и фильтров. Django будет использовать имя функции в качестве имени тега. Если вы хотите зарегистрировать его под другим именем, вы можете сделать это, указав атрибут имени, например @register.simple_tag(name='my_tag') .

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

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

  1. Тег включения: На этот раз мы будем использовать тег включения. Используя тег включения, вы можете визуализировать шаблон с переменными контекста, возвращаемыми тегом шаблона. Отредактируйте custom_tags.py файл и добавьте следующий код:
  @register.inclusion_tag('path_to_your_html_file.html')
  def any_function():
      variable = YourModel.objects.order_by('-publish')[:5]
      return {'variable': variable}

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

  1. Тег назначения: Наконец, мы собираемся создать тег назначения . Теги назначения похожи на простые теги, но они хранят результат в заданной переменной. Редактировать custom_tags.py файл и добавьте в него следующий тег импорта и шаблона:
  @register.assignment_tag
  def any_function(count=5):
      return *some database query*

Обозначение для тегов шаблона назначения – {% template_tag как переменная %} . Мы можем использовать тег назначения в нашем html-файле, как показано ниже:

  {% any_function as queries %}
  
    {% for query in queries %}
  • ...
  • {% endfor %}

Использовать теги шаблонов в приложении django очень просто.

Ресурсы

  • Вы можете найти полную ссылку на пользовательские теги шаблонов и фильтры Здесь
  • Вы можете найти полную ссылку на встроенные теги шаблонов и фильтры Здесь .