Функция reverse_lazy
Функция reverse_lazy применяется для отложенного построения URL-адресов, когда требуется передать URL в место, где он не может быть вычислен немедленно, например, в атрибуты классов представлений. Она принимает те же аргументы, что и функция reverse: имя маршрута, аргументы и ключевые аргументы. В отличие от reverse, которая возвращает строку с URL немедленно, reverse_lazy возвращает объект, который преобразуется в строку только тогда, когда к нему обращаются как к строке.
Синтаксис
from django.urls import reverse_lazy
reverse_lazy(viewname, urlconf=None, args=None, kwargs=None, current_app=None)
Параметры функции:
-
viewname- имя маршрута (строка) или путь к представлению, например,'myapp:index'. -
args- позиционные аргументы для подстановки в URL (список или кортеж). -
kwargs- именованные аргументы для подстановки в URL (словарь). -
urlconf- URL-конфигурация для использования (по умолчанию None). -
current_app- указывает на текущее приложение для разрешения пространства имен (по умолчанию None).
Пример . Использование в классе
Рассмотрим пример использования reverse_lazy в классе CreateView для указания URL перенаправления после успешного создания объекта:
from django.views.generic import CreateView
from django.urls import reverse_lazy
from myapp.models import Article
class ArticleCreateView(CreateView):
model = Article
fields = ['title', 'content']
success_url = reverse_lazy('myapp:article_list')
Пример . Использование с аргументами
Функция reverse_lazy поддерживает передачу позиционных и именованных аргументов. Например, создадим URL для просмотра статьи с определенным идентификатором:
from django.urls import reverse_lazy
article_detail_url = reverse_lazy('myapp:article_detail', args=[42])
print(article_detail_url)
Результат выполнения кода:
"/articles/42/"
Пример . Использование с именованными аргументами
Используем именованные аргументы для построения URL со слагом статьи:
from django.urls import reverse_lazy
url = reverse_lazy('myapp:article_detail', kwargs={'slug': 'django-basics'})
print(url)
Результат выполнения кода:
"/articles/django-basics/"
Пример . Использование в модели
Рассмотрим использование reverse_lazy в методе get_absolute_url модели. Важно отметить, что в этом случае лучше использовать reverse, но для демонстрации работы reverse_lazy покажем пример:
from django.db import models
from django.urls import reverse_lazy
class Article(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(unique=True)
def get_absolute_url(self):
return reverse_lazy('myapp:article_detail', kwargs={'slug': self.slug})
Смотрите также
-
функция
reverse,
которая немедленно возвращает строку URL -
функция
resolve,
которая преобразует URL в соответствующее представление -
функция
path,
которая определяет маршрут в URL-конфигурации -
класс
RedirectView,
который используетreverse_lazyдля построения URL перенаправления