Сразу выше -"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'
"""
Есть три параметра:
- скомпилированная функция func (функция Python);
- take_context будет объяснен во второй части;
- Имя совпадает с именем в функции 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) Определение содержит метку:
- Параметр, передаваемый декоратором, — это путь к файлу шаблона для отображения данных!
- Конечным результатом является объект словаря.