Добавление шаблонов URL-адресов представлений
Шаблоны URL-адресов позволяют соотносить URL-адреса с представлениями.
Шаблон URL-адреса состоит из строкового шаблона, представления и опционально, имени, которое позволяет именовать URL-адрес в масштабе всего проекта.
Django просматривает каждый шаблон URL-адреса и останавливается на первом, который совпадает с запрошенным URL-адресом.
Затем Django импортирует представление, совпадающее с шаблоном URL-адреса, и исполняет его, передавая экземпляр класса HttpRequest и именованные или позиционные аргументы.
Внутри каталога приложения blog создайте файл urls.py и добавьте в него следующие ниже строки:
from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [
# представления поста
path('', views.post_list, name='post_list'),
path('<int:id>/', views.post_detail, name='post_detail'),
]
В приведенном выше исходном коде определяется именное пространство приложения с помощью переменной app_name.
Такой подход позволяет упорядочивать URL-адреса по приложениям и при обращении к ним использовать имя.
С помощью функции path() определяются два разных шаблона:
Первый шаблон URL-адреса не принимает никаких аргументов и соотносится с представлением post_list.
Второй шаблон соотносится с представлением post_detail и принимает только один аргумент id, который совпадает с целым числом, заданным целым числом конвертора путей int.
Для захвата значений из URL-адреса используются угловые скобки. Любое значение, указанное в шаблоне URL-адреса как <parameter>, записывается в качестве строкового литерала. Для конкретного сопоставления и возврата целого числа используются конверторы путей, такие как <int:year>.
Например, <slug:post> будет, в частности, совпадать со слагом (строковым литералом, который может содержать только буквы, цифры, подчеркивания или дефисы).
Все предоставляемые веб-фреймворком Django конверторы путей можно посмотреть по адресу https://docs.djangoproject.com/en/5.0/topics/http/urls/#path-converters.
Если функции path() и конверторов будет недостаточно, то вместо них можно использовать re_path(), чтобы определять сложные шаблоны URL-адресов с помощью регулярных выражений Python.
Подробнее об определении шаблонов URL-адресов с помощью регулярных выражений можно узнать по адресу https://docs.djangoproject.com/en/5.0/ref/urls/#django.urls.re_path.
Если вы раньше с регулярными выражениями не работали, то, возможно, вам сперва захочется взглянуть на руководство по регулярным выражениям на странице https://docs.python.org/3/howto/regex.html.
Далее необходимо вставить шаблоны URL-адресов приложения blog в главные шаблоны URL-адресов проекта.
Отредактируйте файл urls.py, расположенный внутри каталога mysite проекта, придав ему следующий вид:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls', namespace='blog')),
]
Новый шаблон URL-адреса, определенный с помощью функции include, ссылается на шаблоны URL-адресов, определенные в приложении blog, что-бы они были включены в рамки пути blog/.
Указанные шаблоны вставляются в рамки именного пространства blog. Именные пространства должны быть уникальными для всего проекта.
Позже можно будет легко ссылаться на URL-запросы блога, используя именное пространство, за которым следует двоеточие, и имя URL-запроса, например blog:post_list и blog:post_detail.
Подробнее о пространствах имен для URL-запросов можно узнать по адресу https://docs.djangoproject.com/en/5.0/topics/http/urls/#url-namespaces.