Конвертер path
Конвертер path применяется в маршрутах для извлечения
частей URL и преобразования их в переменные с типами данных.
В Django по умолчанию доступны несколько встроенных конвертеров:
str, int, slug, uuid и path.
Конвертер path позволяет захватывать любой путь, включая
слеши, что делает его полезным для обработки глубоких URL.
Синтаксис
path('route/<path:variable>/', view_function, name='url_name')
Пример
Давайте создадим маршрут для обработки глубоких путей
с использованием конвертера path:
from django.urls import path
from . import views
urlpatterns = [
path('docs/<path:doc_path>/', views.document_view, name='document'),
]
Теперь напишем view-функцию, которая будет принимать
переменную doc_path:
from django.http import HttpResponse
def document_view(request, doc_path):
return HttpResponse(f"Path: {doc_path}")
Результат выполнения при обращении к URL
'/docs/guides/install/setup/':
"Path: guides/install/setup/"
Пример
Рассмотрим использование конвертера path
для обработки путей к файлам:
from django.urls import path
from . import views
urlpatterns = [
path('files/<path:file_path>/', views.file_view, name='file'),
]
View-функция для обработки пути к файлу:
from django.http import HttpResponse
def file_view(request, file_path):
return HttpResponse(f"File path: {file_path}")
Результат выполнения при обращении к URL
'/files/static/images/logo.png':
"File path: static/images/logo.png"
Пример
Конвертер path можно комбинировать с другими
конвертерами для создания сложных маршрутов:
from django.urls import path
from . import views
urlpatterns = [
path('user/<int:user_id>/docs/<path:doc_path>/', views.user_document_view, name='user_doc'),
]
View-функция для обработки такого маршрута:
from django.http import HttpResponse
def user_document_view(request, user_id, doc_path):
return HttpResponse(f"User ID: {user_id}, Document path: {doc_path}")
Результат выполнения при обращении к URL
'/user/42/docs/guides/install/setup/':
"User ID: 42, Document path: guides/install/setup/"