URL-адреса Django
Мы собираемся сделать нашу первую веб-страничку — домашнюю страницу твоего блога! Но для начала давай чуть ближе познакомимся с URL-адресами в Django.
Что такое URL-адрес?
URL — это просто адрес в интернете. Ты можешь увидеть URL каждый раз, когда посещаешь веб-сайт — он отображается в адресной строке твоего браузера (да, 127.0.0.1:8000
— это URL-адрес! И https://djangogirls.org
— тоже URL):
Любая страница в Интернете нуждается в собственном URL-адресе. Таким образом ваше приложение точно знает, что показать пользователю, который открывает конкретный URL-адрес. В Django мы используем так называемый URLconf
(англ. URL configuration, конфигурация URL). URLconf — это набор шаблонов, которые Django попробует сравнить с полученным URL, чтобы выбрать правильный метод для отображения (view).
Как URL-адреса работают в Django?
Давай откроем файл mysite/urls.py
в нашем редакторе и посмотрим, как он выглядит:
mysite/urls.py
"""mysite URL Configuration
[...]
"""
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
Как можешь заметить, Django уже кое-что разместил здесь для нас.
Строки, расположенные между тройными кавычками ('''
или """
), называются docstrings
— ты можешь добавить их в начале файла, класса или метода для описания их функциональности. Python будет их игнорировать при запуске приложения.
URL-адрес раздела администрирования, который мы посещали в предыдущей главе, уже здесь присутствует:
mysite/urls.py
path('admin/', admin.site.urls),
Таким образом, любому URL-адресу, начинающемуся с admin/
, Django будет находить соответствующее view (представление). В этом случае мы охватываем большое количество различных URL-адресов, которые явно не прописаны в этом маленьком файле — так он становится более аккуратным и удобочитаемым.
Твой первый URL-адрес в Django!
Пришло время создать твой первый URL-адрес! Мы хотим, чтобы 'http://127.0.0.1:8000/' возвращал домашнюю страничку нашего блога со списком записей в нём.
Мы также хотим сохранить файл mysite/urls.py
в максимально аккуратном виде, так что мы импортируем URL-адреса для нашего приложения blog
в mysite/urls.py
.
Вперёд, добавь строку для импорта blog.urls
. Обрати внимание, что здесь мы используем функцию include
, поэтому тебе придется импортировать её в строке from django.urls...
.
Файл mysite/urls.py
должен выглядеть следующим образом:
mysite/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('blog.urls')),
]
Django теперь будет перенаправлять все запросы 'http://127.0.0.1:8000/' к blog.urls
и искать там дальнейшие инструкции.
blog.urls
Создай новый пустой файл blog/urls.py
. Отлично! Добавь в него следующие две строки:
blog/urls.py
from django.urls import path
from . import views
Так мы импортировали функцию path
Django и все views
(представления) из приложения blog
(у нас их пока нет, но через минуту они появятся!)
После этого мы можем добавить наш первый URL-шаблон:
blog/urls.py
urlpatterns = [
path('', views.post_list, name='post_list'),
]
Как ты можешь заметить, мы связали view
под именем post_list
с корневым URL-адресом (''
). Этот шаблон URL будет соответствовать пустой строке. Это правильно, потому что для обработчиков URL в Django 'http://127.0.0.1:8000/' не является частью URL. Этот шаблон скажет Django, что views.post_list
— это правильное направление для запроса к твоему веб-сайту по адресу 'http://127.0.0.1:8000/'.
Последняя часть name='post_list'
— это имя URL, которое будет использовано, чтобы идентифицировать его. Оно может быть таким же, как имя представления (англ. view), а может и чем-то совершенно другим. Мы будем использовать именованные URL позднее в проекте, поэтому важно указывать их имена уже сейчас. Мы также должны попытаться сохранить имена URL-адресов уникальными и легко запоминающимися.
Если сейчас ты попытаешься открыть страницу http://127.0.0.1:8000/ в браузере, то увидишь сообщение о том, что веб-страница недоступна. Это произошло потому, что сервер (помнишь, как мы набирали runserver
?) перестал обрабатывать запросы. Чтобы понять почему, открой окно своей командной строки.
В твоей командной строке появилось сообщение об ошибке, но не беспокойся — оно, на самом деле, довольно полезно. Ты можешь прочесть, что не существует атрибута с именем 'postlist' — _no attribute 'post_list'. Это название представления, которое Django пытается найти и использовать, но мы же его ещё не создали. В данный момент раздел /admin/
тоже не будет работать. Не беспокойся, мы этим займёмся.
Если хочешь узнать больше о Django URLconfs, посмотри официальную документацию: https://docs.djangoproject.com/en/2.0/topics/http/urls/