Django 5 для начинающих

Прогресс по курсу:  9/1004

2.6 Шаблоны, часть 1.
5 из 13 шагов пройдено
0 из 36 баллов  получено

Тег для задания значений переменным

Если требуется определить переменную и использовать ее внутри шаблона, то для этого можно использовать тег: {% with %}.

{% with name="Tom" age=29 %}
    <div>
        <p>Name: {{ name }}</p>
        <p>Age: {{ age }}</p>
    </div>
{% endwith %}

В данном случае определены две переменных: name и age, которые мы можем использовать внутри блока {% with%} {% endwith %}. Однако вне этого блока эти переменные использоваться не могут.

 

autoescape

Тег autoescape позволяет автоматически экранировать ряд символов HTML и тем самым сделать вывод на страницу более безопасным. В частности, производятся следующие замены:

  • < заменяется на &lt;
  • > заменяется на &gt;
  • ' (одинарная кавычка) заменяется на &#x27;
  • " (двойная кавычка) заменяется на &quot;
  • & заменяется на &amp;

Например, пусть у нас будет определен следующий шаблон 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.


  • Комментария
Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Оставить комментарий

В данном месте я так понимаю приведен просто пример применения тега autoescape, без привязки к нашему проекту? Потому что если кто-то захочет скопировать и закрепить теорию на практике (как мы делали до этого), то выдаст ошибку, так как нужно скорректировать имя (адрес) шаблона на "blog/index.html"

@Максим_Михеев, По задумке это было написано ради примера, но добавили правильный путь для практикантов.

Так что пора перейти к следующему разделу, в котором рассматриваются

Изменен Георгий Тимофеев

@Георгий_Тимофеев, спасибо, исправил.