Как и любой серверный веб-фреймворк, Django построен вокруг HTTP. Он принимает запросы, на основе которых формирует и отдает HTTP-ответы. Django берет на себя всю грязную работу: разбор запроса, выбор правильного обработчика, отправку ответа клиенту. Программисту остается выполнить только самый необходимый минимум для добавления новых страниц на сайте.
В этом уроке разберемся, что и как нужно делать разработчику, чтобы добавить новые страницы на сайт.
Первая страница на Django
В этот минимум входят три вещи:
- Маршрут. Определяет адрес конкретной страницы или набора страниц на сайте. Маршрут связывает эти адреса с конкретным обработчиком, который будет вызван при запросе этих страниц
- Контроллер. Слой кода, в котором расположены обработчики страниц сайта. Они анализируют запрос и формируют ответ, который фреймворк отправляет пользователю
- Шаблон. Специальный файл, который используется, чтобы формировать HTTP-ответ
Маршрут
Маршруты любого проекта на Django хранятся в файле urls.py. В нашем случае он находится по пути hexlet_django_blog/urls.py. Этот файл предназначен для описания маршрутов нашего сайта.
В этом файле находится переменная urlpatterns
— список маршрутов нашего сайта. Изначально этот файл содержит только один маршрут, который соответствует разделу администратора admin/:
# hexlet_django_blog/urls.py
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
Функция path(route, view)
задает правило для обработки маршрута. Первым параметром она принимает адрес запрашиваемой страницы или паттерн, который описывает группу страниц. В коде выше это адрес раздела администратора.
Вторым параметром передается обработчик или встраиваемый urls.py другого приложения. Обработчики запросов в Django называют view — на жаргоне джангистов «вьюха».
Заменим стартовую страницу на собственную. Нам понадобится view и шаблон —template.
Для этого в файл urls.py добавим импорт вьюхи:
from hexlet_django_blog import views
Далее добавим в список urlpatterns
новое правило обработки адреса главной страницы:
urlpatterns = [
path('', views.index), # <- добавляем эту строчку
path('admin/', admin.site.urls),
]
Мы добавили правило, которое назначает обработчиком главной страницы или пустого пути вьюху views.index
.
Контроллер
Теперь создадим файл hexlet_django_blog/views.py и запишем в него следующий код:
# hexlet_django_blog/views.py
from django.shortcuts import render
def index(request):
return render(request, 'index.html', context={
'who': 'World',
})
Здесь мы используем функцию render. Она формирует HTML на основе указанного шаблона и использует при рендеринге (составлении страницы) данные из словаря context
.
Шаблон
Теперь нам потребуется шаблон. Создадим директорию hexlet_django_blog/templates и файл index.html в ней. В файл запишем следующее:
<h1>Hello, {{ who }}!</h1>
Остается сделать небольшую настройку Django. Сначала нужно указать Django название директории, в котором будут находиться шаблоны. Для этого в модуле hexlet_django_blog/settings.py находим список TEMPLATES
. Там в списке DIRS
задаем значение BASE_DIR / 'templates'
:
# hexlet_django_blog/settings.py
TEMPLATES = [
{
...
'DIRS': [BASE_DIR / 'templates'],
...
},
]
Теперь нам нужно в конец списка INSTALLED_APPS
добавить строку 'hexlet_django_blog'
. Так Django будет знать, что шаблоны и код у нас находятся в данном пакете:
# hexlet_django_blog/settings.py
INSTALLED_APPS = [
...
'hexlet_django_blog', # <- добавляем эту строчку
]
Запустим сервер разработчика и откроем стартовую страницу. Там можно увидеть приветствие:
Теперь создадим новую страницу /about. Для этого добавим маршрут, вью и шаблон:
Добавим в файл hexlet_django_blog/urls.py новый маршрут:
urlpatterns = [
path('', views.index),
path('about/', views.about), # <- добавляем эту строчку
path('admin/', admin.site.urls),
]
Создадим новый обработчик about внутри hexlet_django_blog/views.py:
def about(request):
return render(request, 'about.html')
Создадим шаблон hexlet_django_blog/templates/about.html и добавим туда следующий HTML:
<h1>О блоге</h1>
<p>Эксперименты с Django на Хекслете</p>
Если открыть страницу /about, то отобразится добавленная страница:
Выводы
Django сам выполняет множество действий: разбирает запросы, выбирает правильный обработчик, отправляет ответ клиенту. Однако он не может выполнить абсолютно всю работу. Поэтому программисту нужно сделать необходимый минимум. В этом уроке мы разобрались, как создавать маршруты и работать с их обработчиками и шаблонами, чтобы добавить новые страницы на сайте.
Самостоятельная работа
- Повторите все из теории урока на своем компьютере
- Зафиксируйте изменения в git
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.