В чем разница render() и redirect() в Django?

#django

#django

Вопрос:

В чем разница между

 def post(self, request, *args, **kwargs):
    if form.is_valid():
        order = form.save(commit=False)
        order.user = request.user
        order.save()
        return redirect('orders:success')
  

и

 def post(self, request, *args, **kwargs):
    if form.is_valid():
        order = form.save(commit=False)
        order.user = request.user
        order.save()
        return render(
            request,
            'orders/success.html',
            {}
        )
  

Я думаю, что это совершенно одно и то же.

Есть разница?

Комментарии:

1. как новичку, я думаю, совершенно ясно, почему можно подумать, что они одинаковы: или, более конкретно, почему они будут иметь одинаковый конечный результат в этом случае. Я тоже пытаюсь выяснить, что предпочтительнее…

Ответ №1:

Оба они совершенно разные, когда перенаправление выдает HttpResponseRedirect для переданного вами аргумента.

пример

 return redirect('https://example.com/')  
  

приведет вас к https://example.com / страница

  return render(request,'/result.html',{'foo':'bar'})
  

отображает контекстный словарь в шаблоне ‘result.html ‘ и возвращает объект HttpResponse с этим отображаемым текстом

result.html … {foo} … где foo будет заменен на bar Для получения более подробной информации загляните в эту документацию django

Ответ №2:

Функция рендеринга Combines a given template with a given context dictionary and returns an HttpResponse object with that rendered text.

Вы запрашиваете страницу, и render функция возвращает ее.

redirect Функция отправляет другой запрос на указанный URL.