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有一个可选空间供您放置名称值,那么您可以传递它.否则,您需要以其他方式执行此操作:可能在会话中.
您不能使用HttpResponse或 来执行此操作HttpResponseRedirect。你必须使用render或render_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 }}为它的值。