English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Django может разделить Python и HTML, Python-код/переменные входят в вид и HTML-шаблон. Соединение этих двух, Django зависит от функции рендеринга и языка шаблонов Django.
Эта функция имеет три параметра −
Запрос − Инициализация запросаПуть к шаблону − Это путь относительно переменной в файле settings.py проекта к опции TEMPLATE_DIRS.Словарь параметров − Словарь содержит все переменные, необходимые для шаблона. Эти переменные могут быть созданы или использованы через locals() через все локальные переменные, объявленные в виде.
Язык шаблонов Django (DTL)
Моторны Django предоставляет малый язык для определения пользовательского интерфейса приложения.
Отображение переменных
Переменные отображаются следующим образом: {{variable}}. Шаблон заменяет переменные на переменные, переданные в третий параметр функции рендеринга (render). Давайте изменим hello.html, чтобы отобразить текущую дату:
hello.html
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.oldtoolbag.com # Date : 2020-08-08 <html> <body> Hello World!!!<p>Сегодня {{today}}</p> </body> </html>
Затем, наш вид будет изменен на -
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.oldtoolbag.com # Date : 2020-08-08 def hello(request): today = datetime.datetime.now().date() return render(request, "hello.html", {"today": today})
Теперь, после доступа к URL /myapp/hello, мы получим следующий вывод:
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.oldtoolbag.com # Date : 2020-08-08 Привет, мир!!! Сегодня 11 сентября, 2015
Как вы, возможно, уже заметили, если переменная не является строкой, Django использует метод __str__ для ее отображения; по тому же принципу, вы можете доступа к свойствам объекта, как в Python. Например: если мы хотим отобразить год даты, переменная здесь: {{today.year}}.
Они могут помочь вам отобразить изменяемые переменные. Структура фильтра представлена следующим образом: {{var|filters}}.
Пример
− Фильтр укорачивает строку, поэтому видны только первые 80 символов.
− Преобразование символов в строчную букву {{string|escape|linebreaks}} − Escape string content, then convert line breaks to tags.
Можно также установить переменные по умолчанию.
Теги могут выполнять следующие действия: if условие, цикл for, наследование шаблонов и многое другое.
Как и в Python, вы можете использовать if, else и elif в шаблоне −
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.oldtoolbag.com # Date : 2020-08-08 <html> <body> Hello World!!!<p>Сегодня {{today}}</p> Мы здесь {% if today.day == 1 %} первый день месяца. {% elif today == 30 %} последний день месяца. {% else %} Я не знаю. {% endif %} </body> </html>
В этом новом шаблоне, в зависимости от текущей даты, шаблон будет отображать это значение.
Как и 'if', у нас есть 'for' тег, которые используются так же, как и в Python. Давайте изменяем список представлений hello, отправляемых в шаблон −
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.oldtoolbag.com # Date : 2020-08-08 def hello(request): today = datetime.datetime.now().date() daysOfWeek = ['Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Вс', 'Сб'] return render(request, "hello.html", {"today" : today, "days_of_week" : daysOfWeek})
Этот шаблон используется для показа списка {{ for }} −
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.oldtoolbag.com # Date : 2020-08-08 <html> <body> Hello World!!!<p>Сегодня {{today}}</p> Мы здесь {% if today.day == 1 %} первый день месяца. {% elif today == 30 %} последний день месяца. {% else %} Я не знаю. {% endif %} <p> {% for day in days_of_week %} {{day}} </p> {% endfor %} </body> </html>
Мы должны получить выходной содержимое, как следует −
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.oldtoolbag.com # Date : 2020-08-08 Привет, мир!!! Сегодня 11 сентября, 2015 Мы не знаем. Пн Вт Ср Пт Чт Вс Сб
Блоки и теги расширения
Система шаблонов является несовершенной системой наследования шаблонов. Когда вы проектируете смысл шаблона, подшаблон заполняет главный шаблон в зависимости от своих потребностей, как, например, могут потребоваться особые CSS для выбранной вкладки на странице.
Давайте изменить шаблон hello.html, чтобы он наследовал main_template.html.
main_template.html
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.oldtoolbag.com # Date : 2020-08-08 <html> <head> <title> {% block title %}Page Title{% endblock %} </title> </head> <body> {% block content %} Body content {% endblock %} </body> </html>
hello.html
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ru.oldtoolbag.com # Date : 2020-08-08 {% extends "main_template.html" %} {% block title %}Моя страница Привет{% endblock %} {% block content %} Hello World!!!<p>Сегодня {{today}}</p> Мы здесь {% if today.day == 1 %} первый день месяца. {% elif today == 30 %} последний день месяца. {% else %} Я не знаю. {% endif %} <p> {% for day in days_of_week %} {{day}} </p> {% endfor %} {% endblock %}
В上面的 примере, при вызове /myapp/hello, мы все еще получаем такой же результат, как и раньше,但现在 мы используем расширение, и не нужно重构 код-−
В main_template.html мы определяем использование тегов блоков. Блок заголовка будет содержать заголовок страницы, а блок контента будет содержать основное содержимое страницы. В Home.html, используя расширение наследования из main_template.html, мы используем вышеуказанные блоки (контент и заголовок).
Теги комментариев используются для определения комментариев в шаблонах, а не HTML комментариев, они не будут出现在 странице HTML. Это может быть файл или просто строка комментария в коде.