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

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

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

Отображение данных на сайте Django осуществляет с помощью шаблонов и встроенных в шаблоны тегов. Шаблоны представляют собой НТМL-страницы. Дело в том, что на страницах НТМL нельзя впрямую размещать код Python, поскольку браузеры его не воспринимают - они понимают только HTML.

Мы также знаем, что страницы НТМL по своей сути статичны, в то время как Python позволяет вносить в программы динамические изменения. Так вот, теги шаблонов Django позволяют вставлять результаты работы программы на Python в НТМL-страницы, что дает нам возможность создавать динамические веб-сайты быстрее и проще.

Из этого раздела мы узнаем:

  • Что такое шаблоны и для чего они нужны;
  • Как использовать функцию render() и класс TemplateResponse для загрузки шаблонов;
  • Как передать в шаблоны простые и сложные данные;
  • Что такое статичные файлы, файлы CSS и как использовать статичные файлы в приложениях на Django;
  • Как можно изменить конфигурацию шаблонов НТМL-страниц;
  • Как можно расширить шаблоны НТМL-страниц на основе базового шаблона;
  • Как можно использовать специальные теги в шаблонах НТМL-страниц.

Создание и использование шаблонов

Шаблоны (templates) отвечают за формирование внешнего вида приложения. Они предоставляют специальный синтаксис, который позволяет внедрять данные в код НТМL.

Для этого создадим в корневой папке проекта новый каталог с именем templates.

Вообще-то имя папки с шаблонами может быть любым, но, как правило, для лучшего восприятия структуры проекта этой папке все же лучше присвоить имя templates.

Теперь нам надо указать, что этот каталог будет использоваться в качестве хранилища шаблонов. Для этого откроем файл settings.py. В этом файле настройка шаблонов производится с помощью переменной TEМPLATES. Здесь параметр DIRS задает набор каталогов, которые хранят шаблоны. Но по умолчанию он пуст.

Изменим этот фрагмент кода следующим образом:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': []
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

А именно изменим на:

'DIRS': [BASE_DIR / 'templates']

Данная переменная принимает список конфигураций для каждого движка шаблонов. По умолчанию определена одна конфигурация, которая имеет следующие параметры:

  • BACKEND: движок шаблонов. По умолчанию применяется встроенный движок django.template.backends.django.DjangoTemplates
  • DIRS: определяет список каталогов, где движок шаблонов будет искать файлы шаблонов. По умолчанию пустой список
  • APP_DIRS: указывает, будет ли движок шаблонов искать шаблоны внутри папок приложений в папке templates.
  • OPTIONS: определяет дополнительный список параметров

Итак, в конфигурации по умолчанию параметр APP_DIRS имеет значение True, а это значит, что движок шаблонов будет также искать нужные файлы шаблонов в папке приложения в каталоге templates.

PyCharm Professional Edition при создании проекта создает папку templates в корне проекта и добавляет нужный путь в settings.py. То есть по умолчанию мы уже имеем настроенную конфигурацию, готовую к использованию шаблонов. Теперь определим сами шаблоны.

Создадим в папке templates новый файл index.html следующего содержания.

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>Учу Django</title>
</head>
<body>
    <h1>Это мой проект Django с использованием шаблонов</h1>
</body>
</html>

По сути, это обычная веб-страница, содержащая код НТМL. Теперь используем эту страницу для отправки ответа пользователю. Для этого перейдем в приложении blog к файлу views.py, который определяет функции для обработки запроса пользователя, и изменим этот файл следующим образом:

from django.shortcuts import render
 
def index(request):
    return render(request, "index.html")

Что мы здесь сделали? Первым шагом мы из модуля django.shortcuts импортировали функцию render.
Вторым шагом изменили функцию def index(request). Теперь функция index(request) вызывает функцию render, которой передаются объект запроса пользователя request и файл шаблона index.html, который находится в папке templates.

Свяжем эту функцию с маршрутами, для этого в urls.py приложения blog напишем следующий код:

from django.urls import path
from blog import views

urlpatterns = [
    path('', views.index),
]

И теперь при запуске нашего проекта, при наличии строки path('', views.index)  в файле urls.py, мы увидим следующую страницу:

Нас можно поздравить - мы создали свой первый шаблон. Пока он пустой, но это не беда. Теперь мы можем вносить в этот шаблон изменения, менять его дизайн, вставлять в него данные и возвращать пользователю динамически генерируемые веб-страницы.


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

Понравилась задача, тест или урок? Поставьте лайк, поддержите курс. Ваша поддержка очень важна для нас.

Не подскажете почему возникает ошибка? Я так понимаю, надо внести изменения в urls.py проекта, но не понимаю какие именно. Прикрепляю скрин

Чето поспешил я вопрос задавать)))
Все, я разобрался). Сразу после отправки коммента дошло, что надо убрать путь с access и у индекса прописать пустую строку

@Daniil_Nagapetyan, А у тебя Pycharm платный?

@Nikolay_Novozhenin, не, у меня обычная версия

Автор у вас не курс, а мечта, теория куча практики класс 

В чем проблема? Все сделал по инструкции, но шаблон все равно не находит. 

@Yernur_Satybaldiyev

@Yernur_Satybaldiyev, Папку шаблонов мы создаем на уровне проекта. Нужно переместить её в корень проекта.