render是渲染变量到模板中,而redirect是HTTP中的1个跳转的函数,一般会生成302状态码。
render_to_response('current_datetime.html', {'current_date': now})//第一个参数是模板页面,第二个参数是变量
return HttpResponseRedirect("your url")//直接跳转到指定url
示例:
def userinfo(request):
if request.method == 'GET':
# QuerySet
user_list = models.UserInfo.objects.all()
return render(request, 'app02/userinfo.html', {'user_list':user_list})
elif request.method == 'POST':
u = request.POST.get('username')
p = request.POST.get('password')
models.UserInfo.objects.create(
username=u,
password=p
)
return redirect('/app02/userinfo/') # 这里会走本方法的GET条件语句,就不需要再写一次查询。
注意:redirect()里面只需要传递一个url。
return redirect('/app02/userinfo/') # 正确
return redirect(request, '/app02/userinfo/') # 错误
return与redirect在浏览器地址栏的区别:
def index1(request):
if request.session.get('is_login') == True:
return render(request, 'cookie/index1.html', {'username':request.session['username']})
else:
#return render(request, 'cookie/login1.html')
return redirect('/cookie/login1/')
如果是redirect,那么不仅内容返回的是里面的模板内容,地址栏中的地址也会改变为模板内容的路径。
如果是return,那么内容会返回的是模板内容,地址栏中的地址不会改变,还是请求时候的。
如果要想浏览器地址也改变,也render。只有先redirect 然后再render:
也就是说,在浏览器中先redirect到一个url路径,然后在url的那个路径指向的views.py中的方法中render:
https://stackoverflow.com/questions/46191173/render-template-and-i-want-to-the-url-address-change-too
1.redirect要传递参数的话,有一种方法,是通过session保存。