使用Django中的HttpResponseRedirect传递参数

use*_*400 5 django redirect backend http-redirect

我试图从views.py传递一些信息到我的索引页面(index.html).一个通过,我需要在索引页面中访问它.我试过谷歌搜索它,但我不清楚.任何帮助,将不胜感激.我已经在我尝试的下面附上了.

下面我想访问索引页面中的值"bar".我怎样才能做到这一点 ?

def tempLogin(request):
   username = request.POST['username']
   password = request.POST['password']
   user = authenticate(username=username, password=password)
   if user is not None:
       if user.is_active:
           login(request, user)
           return HttpResponseRedirect(reverse('index',foo='bar'))
       else:
           return HttpResponseRedirect(reverse('index'))
   else:
       return HttpResponseRedirect(reverse('index'))
Run Code Online (Sandbox Code Playgroud)

Dan*_*man 11

我看到这个问题相当多,而且它背叛了对HttpResponseRedirect的作用缺乏了解.它只是告诉浏览器去获取另一个URL:所以你可以传递给它的唯一参数是那些其他URL模式所期望的参数.如果您的索引URL有一个可选空间供您放置名称值,那么您可以传递它.否则,您需要以其他方式执行此操作:可能在会话中.


xyr*_*res 4

您不能使用HttpResponse或 来执行此操作HttpResponseRedirect。你必须使用renderrender_to_response。有点像下面这样:

from django.shortcuts import render

def templogin(request):
    # Do all your processings here ...
    return render(request, 'index.html', {'bar': bar})
Run Code Online (Sandbox Code Playgroud)

传递给的第一个参数render始终是request。第二个参数是模板的名称。就你而言,它是index.html。第三个参数是一个字典,即要添加到模板上下文的变量。就你而言,是的bar

这里有更多关于Django 文档的render信息。

然后在您的模板中,您可以访问该bar变量,如下所示:

<h1> {{ bar }} </h1>
Run Code Online (Sandbox Code Playgroud)

或者

<span> Hello, {{ bar }}! </span>
Run Code Online (Sandbox Code Playgroud)

Django 将自动替换{{ bar }}为它的值。