Функция reverse
Функция reverse применяется для получения полного пути URL по имени
маршрута, указанного в файле urls.py. Она принимает имя маршрута
и необязательные аргументы, такие как args или kwargs,
соответствующие параметрам URL. Функция возвращает строку с
сгенерированным URL. Это позволяет избегать жесткого кодирования
URL-адресов в шаблонах и представлениях, делая код более гибким
и удобным для поддержки.
Синтаксис
from django.urls import reverse
reverse(viewname, args=None, kwargs=None, urlconf=None)
Параметр viewname - это строка с именем маршрута, определенного
в файле urls.py. Параметры args и kwargs используются
для подстановки значений в динамические части URL. Параметр
urlconf позволяет указать альтернативный конфигурационный
файл URL-адресов для поиска маршрута.
Пример . С именованным маршрутом
Давайте определим простой маршрут с именем 'blog_article'
в файле urls.py и сгенерируем его URL с помощью reverse:
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('blog/<int:year>/<int:month>/<slug:slug>/', views.article_detail, name='blog_article'),
]
from django.urls import reverse
url = reverse('blog_article', kwargs={'year': 2025, 'month': 9, 'slug': 'django-tips'})
print(url)
Результат выполнения кода:
"/blog/2025/9/django-tips/"
Пример . С маршрутом без параметров
Функцию reverse можно использовать даже для URL-адресов,
не содержащих динамических параметров. Рассмотрим пример с
главной страницей:
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='home'),
]
from django.urls import reverse
url = reverse('home')
print(url)
Результат выполнения кода:
"/"
Пример . С позиционными аргументами
Вместо именованных параметров можно передавать позиционные
аргументы с помощью параметра args. Это удобно, когда
URL содержит простые последовательные параметры:
# urls.py
from django.urls import path
from . import views
urlpatterns = [
path('article/<int:article_id>/', views.article_view, name='article_by_id'),
]
from django.urls import reverse
url = reverse('article_by_id', args=[42])
print(url)
Результат выполнения кода:
"/article/42/"
Пример . Использование в представлении
Функция reverse часто используется в представлениях для
перенаправления пользователя после выполнения какого-либо
действия. Рассмотрим это на примере создания новой записи:
from django.http import HttpResponseRedirect
from django.urls import reverse
from .models import Article
def create_article(request):
# Сохранение статьи...
article = Article.objects.create(title="New Article", content="Content")
url = reverse('article_detail', kwargs={'pk': article.pk})
return HttpResponseRedirect(url)
В этом примере после создания статьи мы генерируем URL для просмотра детальной страницы и перенаправляем пользователя на неё. Результат выполнения кода:
"/article/1/"
Пример . С пространством имен
Если маршрут определен внутри пространства имен приложения,
например 'blog:detail', нужно указать полное имя
с префиксом. Рассмотрим такой пример:
# urls.py
from django.urls import path, include
urlpatterns = [
path('blog/', include('blog.urls', namespace='blog')),
]
# blog/urls.py
from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [
path('post/<int:post_id>/', views.post_detail, name='detail'),
]
from django.urls import reverse
url = reverse('blog:detail', kwargs={'post_id': 15})
print(url)
Результат выполнения кода:
"/blog/post/15/"
Смотрите также
-
функция
re_path,
позволяющая определять маршруты с помощью регулярных выражений -
функция
include,
используемая для подключения файлов с маршрутами приложений -
функция
reverse_lazy,
позволяющая отложить генерацию URL до момента фактического использования -
функция
path,
используемая для определения маршрутов в файлеurls.py