Django - render与redirect的区别

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保存。

你可能感兴趣的:(Django - render与redirect的区别)