使用Django中的HttpResponseRedirect传递参数

时间:2014-04-16 17:13:01

标签: 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'))

2 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:4)

您无法使用HttpResponseHttpResponseRedirect执行此操作。您必须使用renderrender_to_response。有点像下面:

from django.shortcuts import render

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

传递给render的第一个参数始终为request。第二个参数是模板的名称。在您的情况下,它是index.html。第三个参数是字典要添加到模板上下文的变量。在您的情况下,它是bar

以下是Django docsrender的更多信息。

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

<h1> {{ bar }} </h1>

<span> Hello, {{ bar }}! </span>

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