18. Используйте в пользовательских тегах и шаблонах [от мелкого до глубокого]

задняя часть
18. Используйте в пользовательских тегах и шаблонах [от мелкого до глубокого]

Сразу выше -"17. Использование пользовательских фильтров и шаблонов (на практике функции встроенных фильтров опустить и обрезать реализуются через пользовательские фильтры)", в этой статье речь пойдет о пользовательских тегах! ! !

Пользовательские метки:

Изучение исходного кода: template.Library().simple_tags():

def simple_tag(self, func=None, takes_context=None, name=None):
    """
    Register a callable as a compiled template tag. Example:

    @register.simple_tag
    def hello(*args, **kwargs):
        return 'world'
    """

Есть три параметра:

  1. скомпилированная функция func (функция Python);
  2. take_context будет объяснен во второй части;
  3. Имя совпадает с именем в функции filter() пользовательского фильтра.

Часть 1. Начало работы с пользовательскими этикетками!

Передайте параметры при использовании пользовательских тегов в шаблонах!

Реализована пользовательская метка - отображать текущее время в заданном формате (формат модуля datetime)!

(1) Напишите функцию просмотра:

(файл ceshi/views.py)在这里插入图片描述

(2) Напишите файл шаблона:

(файл templates/ceshi/test1.html)在这里插入图片描述

(3) Реализация пользовательской метки:

(файл ceshi/templatetags/common_extras.py) format_string получает параметры, переданные шаблоном внешнего интерфейса с помощью тегов.

在这里插入图片描述

(4) Отображение эффекта:

在这里插入图片描述

Вторая часть - промежуточная работа с пользовательской этикеткой!

О пояснении и использовании параметра take_context в исходниках (также реализует функции, реализованные в первой части)! Значение take_context — логическое значение, значение по умолчанию — False; Если вы установите значение True, вы сможете использовать параметр, переданный из контекста (т. е. параметр контекста, переданный шаблону в функции просмотра)!

(1) Напишите функцию просмотра:

(файл ceshi/views.py)在这里插入图片描述

(2) Напишите файл шаблона:

На данный момент при использовании пользовательского тега в шаблоне он не несет параметров, потому что параметры уже получены в контексте!(файл templates/ceshi/test1.html)

在这里插入图片描述

(3) Реализация пользовательской метки:

(файл ceshi/templatetags/common_extras.py)

在这里插入图片描述




Часть 3. Расширенные операции с пользовательскими метками!

Пользовательские включают этикетки! Возможность включать метки - можно отображать некоторые данные, отрисовав другой шаблон!

Например, следующие строки кода могут использоваться во многих местах (могут включать в себя десятки строк кода в этом цикле for), за исключением того, что выбор переменных отличается, когда другие форматы одинаковы, тогда мы можем инкапсулировать эта часть кода во включенном теге!

<ul>
    {% for i in choices %}
        <li>{{ i }}</li>
    {% endfor %}
</ul>

(На самом деле она похожа на функцию инкапсуляции, инкапсулируя большой объем повторяющейся работы и вызывая ее напрямую при использовании!)

(1) Определите файл test01.html для хранения кода функции:

(файл templates/ceshi/test01.html)

<ul>
    {% for i in choices %}
        <li>{{ i }}</li>
    {% endfor %}
</ul>

(2) Определение содержит метку:

  • Параметр, передаваемый декоратором, — это путь к файлу шаблона для отображения данных!
  • Конечным результатом является объект словаря.

在这里插入图片描述

(3) Использование:

在这里插入图片描述

(4) Отображение эффекта:

在这里插入图片描述