Использование специальных тегов в шаблонах НТМL-страниц
В Django предоставлена возможность использовать в шаблонах ряд специальных тегов, которые упрощают вывод некоторых данных. Рассмотрим некоторые наиболее часто используемые теги.
Тег для вывода текущих даты и времени
Для вывода дат в Django используется следующий тег:
{% now "формат_данных" %}
Тег now позволяет вывести системное время. В качестве параметра тегу now передается формат данных, который указывает, как форматировать время и дату. Для форматирования времени и дат используются следующие символы. Символ Y передает год в виде четырех цифр, y - берет из года последние две цифры. F - полное название месяца, M -сокращенное название месяца. j - день месяца. P - время. Все возможные форматы для вывода даты и времени можно посмотреть в документации.
Пример:
<p>Год в виде четырех цифр - {% now "Y" %}</p>
<p>Год в виде последних двух цифр - {% now "y" %}</p>
<p>Полное название месяца - {% now "F" %}</p>
<p>Сокращенное название месяца - {% now "M" %}</p>
<p>Номер месяца, с ведущим нулём - {% now "m" %}</p>
<p>Номер месяца, без ведущего нуля - {% now "n" %}</p>
<p>Аббревиатура месяца - {% now "N" %}</p>
<p>День месяца, с ведущим нулём - {% now "d" %}</p>
<p>День месяца, без ведущего нуля - {% now "j" %}</p>
<p>День недели - текст - {% now "l" %}</p>
<p>Часы (0-12) - {% now "h" %}</p>
<p>Часы (0-24) - {% now "H" %}</p>
<p>Минуты (0-59) - {% now "i" %}</p>
<p>Секунды (0-59) - {% now "s" %}</p>
<p>Дата (день/месяц/год) - {% now "j/m/Y" %}</p>
<p>Время (час:мин:сек) - {% now "H:i:s" %}</p>
Тег для вывода информации no условию
Тег для вывода информации в зависимости от соблюдения какого-либо условия выглядит следующим образом:
{% if %}
{% elif %}
{% else %}
{% endif %}
В качестве параметра тегу if передается выражение, которое должно возвращать True или False.
Для проверки дополнительных условий могут быть использованы один или несколько тегов elif, и тег else, для условий которые не прошли проверку в тегах if и elif.
Предположим, что из представления views в шаблон передаются некоторые значения - например, возраст клиента age.
Изменим следующим образом текст функции def index() в файле views.py:
from django.shortcuts import render
def index(request):
data = {"age": 50}
return render(request, "blog/index.html", context=data)
В шаблоне страницы в зависимости от значения переменной age мы можем выводить разную информацию. Например:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Учу Django</title>
</head>
<body>
<p>Анализ возраста клиента</p>
{% if age > 65 %}
<p>Клиент достиг пенсионного возраста</p>
{% else %}
<p>Клиент не является пенсионером</p>
{% endif %}
</body>
</html>
На этой странице мы проверяем условие - является ли клиент пенсионером.
Если возраст клиента больше 65 лет, то на странице будет выдано сообщение Клиент достиг пенсионного возраста, в противном случае будет выведено сообщение Клиент не является пенсионером.
Тег для вывода информации в цикле
Тег for позволяет создавать циклы. Этот тег принимает в качестве параметра некоторую коллекцию и пробегается по этой коллекции, обрабатывая каждый ее элемент. Тег имеет следующую структуру:
{% for "Индекс элемента" in "Коллекция элементов" %}
{% endfor %}
Предположим, что из представления views в шаблон передается список значений - например, категории языков cat.
Изменим следующим образом текст функции index() в файле views.py:
from django.shortcuts import render
def index(request):
cat = ["Python", "Java", "JS", "Go", "C#", "Kotlin"]
return render(request, "blog/index.html", context={"cat": cat})
Чтобы, в шаблоне страницы blog/index.html в цикле выводить информацию из списка cat, напишем следующий код:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Учу Django</title>
</head>
<body>
<p>Категории</p>
<ul>
{% for i in cat %}
<li>{{ i }}</li>
{% endfor %}
</ul>
</body>
</html>
Проверим работу перейдя по адресу - http://127.0.0.1:8000
Вполне возможно, что список, переданный из представления views в шаблон, окажется пустым. На этот случай мы можем использовать дополнительный тег: {% empty %}.
<р>Категории</р>
<ul>
{% for i in cat %}
<li>{{ i }}</li>
{% empty %}
<li>Категории пусты</li>
{% endfor %}
</ul>