В чем разница между Reverse и Redirect в Django?
Я делаю проект django, и очень запутался в reverse, reverse_lazy и redirect.
Может ли функция redirect перенаправлять с параметрами? Или я должен изменить метод на обратный всякий раз, когда я хочу разместить параметры?
Может ли функция redirect перенаправлять с параметрами?
Да. Представьте, что у вас есть шаблон url с:
path('foo/<str:bar>/<id:pk>/', name='some_path')
вы можете перенаправить на этот путь с помощью:
return redirect('some_path', bar='value-for-bar', pk=1425)
очень путается в понятиях reverse, reverse_lazy и redirect.
reverse и reverse_lazy определяют путь для заданного имени представления. Этот путь является строкой, а не ответом HTTP, вы не можете вернуть такую строку в качестве результата для представления.
Функция redirect(…) [Django-doc] будет вызывать reverse(…) функцию [Django- doc] внутренне и обернет результат в HttpResponseRedirect [Django-doc] или HttpResponsePermanentRedirect [Django-doc].
Таким образом, он объединяет два слоя: слой urls для вычисления пути и слой view для построения HTTP ответа, поэтому он определен в модуле django.shortcuts [Django-doc].