Функция reverse

Функция reverse применяется для получения полного пути URL по имени маршрута, указанного в файле urls.py. Она принимает имя маршрута и необязательные аргументы, такие как args или kwargs, соответствующие параметрам URL. Функция возвращает строку с сгенерированным URL. Это позволяет избегать жесткого кодирования URL-адресов в шаблонах и представлениях, делая код более гибким и удобным для поддержки.

Синтаксис

pythonfrom 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:

python# 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'),
]
pythonfrom django.urls import reverse

url = reverse('blog_article', kwargs={'year': 2025, 'month': 9, 'slug': 'django-tips'})
print(url)

Результат выполнения кода:

python"/blog/2025/9/django-tips/"

Пример . С маршрутом без параметров

Функцию reverse можно использовать даже для URL-адресов, не содержащих динамических параметров. Рассмотрим пример с главной страницей:

python# urls.py
from django.urls import path
from . import views

urlpatterns = [
  path('', views.index, name='home'),
]
pythonfrom django.urls import reverse

url = reverse('home')
print(url)

Результат выполнения кода:

python"/"

Пример . С позиционными аргументами

Вместо именованных параметров можно передавать позиционные аргументы с помощью параметра args. Это удобно, когда URL содержит простые последовательные параметры:

python# urls.py
from django.urls import path
from . import views

urlpatterns = [
  path('article/<int:article_id>/', views.article_view, name='article_by_id'),
]
pythonfrom django.urls import reverse

url = reverse('article_by_id', args=[42])
print(url)

Результат выполнения кода:

python"/article/42/"

Пример . Использование в представлении

Функция reverse часто используется в представлениях для перенаправления пользователя после выполнения какого-либо действия. Рассмотрим это на примере создания новой записи:

pythonfrom 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 для просмотра детальной страницы и перенаправляем пользователя на неё. Результат выполнения кода:

python"/article/1/"

Пример . С пространством имен

Если маршрут определен внутри пространства имен приложения, например 'blog:detail', нужно указать полное имя с префиксом. Рассмотрим такой пример:

python# 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'),
]
pythonfrom django.urls import reverse

url = reverse('blog:detail', kwargs={'post_id': 15})
print(url)

Результат выполнения кода:

python"/blog/post/15/"

Смотрите также

  • функция re_path,
    позволяющая определять маршруты с помощью регулярных выражений
  • функция include,
    используемая для подключения файлов с маршрутами приложений
  • функция reverse_lazy,
    позволяющая отложить генерацию URL до момента фактического использования
  • функция path,
    используемая для определения маршрутов в файле urls.py