Django сопоставляет URL с view через urlpatterns.
Базовый синтаксис
# tasks/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.task_list, name='task-list'),
path('<int:pk>/', views.task_detail, name='task-detail'),
path('create/', views.create_task, name='task-create'),
path('<int:pk>/edit/', views.edit_task, name='task-edit'),
path('<int:pk>/delete/', views.delete_task, name='task-delete'),
]
path() параметры
path('<int:pk>/', view) # целое число → pk
path('<str:slug>/', view) # строка → slug
path('<uuid:id>/', view) # UUID
path('<slug:slug>/', view) # slug (буквы, цифры, дефис)
name= — именованные URL
path('tasks/', views.task_list, name='task-list')
В шаблоне:
<a href="{% url 'task-list' %}">Все задачи</a>
<a href="{% url 'task-detail' pk=task.pk %}">Задача #{{ task.pk }}</a>
В Python:
from django.urls import reverse
url = reverse('task-detail', kwargs={'pk': 5}) # '/tasks/5/'
redirect('task-list')
include() — подключение URL приложений
# mysite/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('tasks/', include('tasks.urls')),
path('blog/', include('blog.urls')),
path('api/', include('api.urls')),
]
Namespace — пространства имён
# tasks/urls.py
app_name = 'tasks' # ← добавить
urlpatterns = [
path('', views.task_list, name='list'),
path('<int:pk>/', views.task_detail, name='detail'),
]
В шаблоне:
{% url 'tasks:list' %}
{% url 'tasks:detail' pk=task.pk %}
re_path — регулярные выражения (редко нужен)
from django.urls import re_path
urlpatterns = [
re_path(r'^archive/(?P<year>[0-9]{4})/$', views.archive),
]
💬 Комментарии (0)
Комментариев пока нет
Станьте первым, кто поделится мнением об этой статье!