Django Апрель 14, 2023
Как в Django добавить свой тег в шаблон

Чтобы добавить свой тег в Django, вы можете создать собственный фильтр или тег, который будет использоваться в ваших шаблонах.
Для создания собственного тега в Django вам нужно выполнить следующие шаги:
-
Создайте файл
templatetags
внутри приложения Django, если его еще нет. В этой директории вы создадите файл с вашим тегом. -
Внутри
templatetags
создайте файл с именем, соответствующим названию вашего тега, напримерmy_tag.py
. -
Внутри файла
my_tag.py
определите ваш тег. Например, следующий код создает тегmy_tag
, который принимает один аргумент:from django import template
register = template.Library()
@register.simple_tag
def my_tag(value):
return value.upper()
- Затем в вашем шаблоне вы можете использовать свой тег с помощью следующего синтаксиса
{% load my_tag %}
{% my_tag "Hello, World!" %}
-
В этом примере мы использовали тег
my_tag
и передали ему строку "Hello, World!". Этот тег преобразует строку в верхний регистр и вернет ее.Заметьте, что мы загрузили наш тег с помощью
{% load my_tag %}
в начале шаблона. Это сообщает Django, что мы хотим использовать наш тег в этом шаблоне.Аналогично вы можете создать фильтр, определенный в файле
my_filter.py
, например:@register.filter
def my_filter(value):
return value * 2 -
А затем использовать его в шаблоне, например:
{% load my_filter %}
{{ my_value|my_filter }}
В этом примере мы загрузили фильтрmy_filter
и применили его к значениюmy_value
, умножив его значение на 2. -
Дополнительные параметры могут быть переданы в теги и фильтры, как и в любые другие функции Python. Например, вы можете добавить дополнительный параметр в наш тег
my_tag
, который указывает, должна ли строка быть преобразована в верхний или нижний регистр:@register.simple_tag
def my_tag(value, case='upper'):
if case == 'upper':
return value.upper()
elif case == 'lower':
return value.lower()
else:
return value -
В этом примере мы добавили необязательный параметр
case
, который по умолчанию установлен на'upper'
. Еслиcase
равно'upper'
, мы преобразуем строку в верхний регистр, если'lower'
, то в нижний регистр. Если значениеcase
не'upper'
или'lower'
, то мы возвращаем исходную строку без изменений.Затем в шаблоне вы можете использовать этот тег с дополнительным параметром, например:
{% my_tag "Hello, World!" case='lower' %}
В этом примере мы передали параметр
case='lower'
в наш тегmy_tag
, чтобы преобразовать строку в нижний регистр.Заметьте, что теги и фильтры могут также принимать произвольное количество аргументов или именованных параметров, если вы используете соответствующую сигнатуру функции Python.
Наконец, не забудьте зарегистрировать свой тег или фильтр с помощью
register.tag()
илиregister.filter()
, как показано в примерах выше.