В этой части учебника по Djnago вы прочитает как работать с URL в этом фреймворке, мы конечно уже затрагивали в прошлой части, но очень косвенно, тут мы уже поговорим по подробнее.
Django URL:
В прошлой части для работы с url мы создали в модуле файл «urls.py», который отвечал за URL в модули, что и понятно, но там мы просто прописали путь без всяких настроек, чего иногда можете быть не достаточно, например, когда вам надо получить статью по идентификатору.
Теперь я вам хочу показать, как вы можете более гибко настроить путь до страницы, что опять же очень полезно, вот вам простой пример:
1 2 3 4 5 6 7 8 9 10 | from django.urls import path from . import views urlpatterns = [ path('articles/2003/', views.special_case_2003), path('articles/<int:year>/', views.year_archive), path('articles/<int:year>/<int:month>/', views.month_archive), path('articles/<int:year>/<int:month>/<slug:slug>/', views.article_detail), ] |
Давайте разберём этот код, в начале как всегда подключаем нужные компоненты, потом делаем список URL путей, и как видите первый мы делаем как и прошлый раз, но вот последующие, с ними всё интереснее.
Как вы видите в них мы используем конструкцию типа <int:year>, первая мы указываем грубо говоря тип переменной, которая у нас будет храниться в этом пути, вторая эта название этой переменной, конкретно мы тут используем два типа, int, то числовой, и slug, это строковый тип, в котором могут быть только цифры и буквы из таблицы ASCII.
Вот более полный список этих типов:
- str — Строковый тип, но он не может иметь символ «/», так как это уже путь;
- int — Числовой тип, без плавающей точки;
- slug — Строка которая символы которой соответствуют таблицы ASCII;
- uuid — Строка которая равна формату UUID, например: f31099fb-c603-4b57-9b54-8c48d605d2d6;
- path — Строковый тип, но уже как путь, и может содержать в себе символ «/»;
Получить это значение очень просто, мы просто передаём её в качестве параметра в функцию которая отвечает за представление для конкретного URL, вот как это будет выглядеть:
1 2 | def post_page(request, slug): ... |
То есть тут slug это значение которое мы получили из нашего URL.
Но если вам этого будет мало, то вы можете использовать регулярные выражения, вот как их нужно использовать:
1 2 3 4 5 6 7 8 9 10 | from django.urls import path, re_path from . import views urlpatterns = [ path('articles/2003/', views.special_case_2003), re_path(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive), re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive), re_path(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<slug>[\w-]+)/$', views.article_detail), ] |
Тут всё тоже самое, но там где мы используем регулярные выражения, у нас вместо path, используется re_path, и для обозначения названия переменной, у нас что типа <year>, а пять же вы можете это там заметить.
Но такой принцип не рекомендуется использовать, так как регулярные выражения работаю долго, поэтому если есть возможность использовать первый вариант, то лучше его.
Также вы можете создать свой тип, на подобии slug или int, но это уже тема наверное для другой статьи.
Вывод:
В этой части учебника по Django вы прочитали про то как работать с URL, точнее основы как с ними работать, этого должно быть достаточно чтобы начать создавать URL почти для любых нужд.