Тег для задания значений переменным
Если требуется определить переменную и использовать ее внутри шаблона, то для этого можно использовать тег: {% with %}.
{% with name="Tom" age=29 %}
<div>
<p>Name: {{ name }}</p>
<p>Age: {{ age }}</p>
</div>
{% endwith %}
В данном случае определены две переменных: name и age, которые мы можем использовать внутри блока {% with%} {% endwith %}. Однако вне этого блока эти переменные использоваться не могут.
autoescape
Тег autoescape позволяет автоматически экранировать ряд символов HTML и тем самым сделать вывод на страницу более безопасным. В частности, производятся следующие замены:
<заменяется на<>заменяется на>'(одинарная кавычка) заменяется на'"(двойная кавычка) заменяется на"&заменяется на&
Например, пусть у нас будет определен следующий шаблон index.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Django</title>
</head>
<body>
{{ body }}
{% autoescape off %}
{{ body }}
{% endautoescape %}
</body>
</html>
Здесь в шаблоне два раза выводится содержимое переменной body. Однако сначала она выводится сама по себе, во втором случае её вывод помещается между тегами {% autoescape %} и {% endautoescape %}. Тег в качестве параметра принимает одно из значений: on (экранирование включено) и off (экранирование отключено). В данном случае тегу передается значение off, а это значит, что внутри блока тега autoescape экранирование отключено.
Определим следующую функцию-представление, которая использует данный шаблон и передаёт в него некоторые данные:
from django.shortcuts import render
def index(request):
return render(request, "blog/index.html", context = {"body": "<h1>Hello World!</h1>"})
Здесь в шаблон передаётся некоторая строка с кодом HTML. По умолчанию шаблоны применяют экранирование. Поэтому на веб-странице мы увидим код HTML в текстовом виде, а во втором случае переданные данные будут интерпретированы непосредственно как код HTML:
Комментарии
Для определения комментариев в шаблоне применяется тег comment: все, что помещается между тегами {% comment %} и {% endcomment %}, игнорируется при генерации HTML-страницы.
Однострочные комментарии можно сделать так: {# текст комментария #}.
В этом разделе были приведены элементарные теоретические сведения о шаблонах Django и показано, как можно создать шаблоны и передать в шаблоны различные данные из программы на Python.
Мы узнали, что через шаблоны можно сформировать и выдать пользователю ответ на его запрос. Однако динамичные веб-сайты должны выполнять и обратную функцию, а именно - принять от пользователя некоторые данные и сохранить их в БД. Для этого в Django используются формы.
Так что пора перейти к следующему разделу, в котором рассматриваются возможности взаимодействия пользователей с удаленной базой данных сайта через формы Django.