【问题标题】:Django Redirect to current pageDjango 重定向到当前页面
【发布时间】:2011-05-10 14:25:50
【问题描述】:

无论我多么努力地尝试并阅读此处的所有问题,我都无法重定向到用户登录后所在的同一页面。我认为现在是时候向人们展示我的代码了,如果你能指出错误的话。谢谢。

我的登录网址(在 base.html 模板中): 这存在于每一页上。用户登录后注销的更改。我读到我必须传递一个参数,例如'next',如下所示:

 <a href="/login/?next={{request.path}}">Login</a>

但是,

*{{request.path}} 始终为空。 *

登录视图:

def mylogin(request):
    """login view"""
    try:
        redirect_to = request.GET.get('next', '/')
    except ValueError:
        redirect_to = "/"

errors = ''
t = loader.get_template('login.html')


# check for POST data
if request.method == 'POST':
    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)
            # Redirect to a success page.
            return HttpResponseRedirect(redirect_to)
        else:
            c = Context({
                'errors':'disabled',
            })
            return HttpResponse("disabled")
    else:
        c = Context({
            'errors':'incorrect',
        })
        return HttpResponse(t.render(c))
else:
    c = Context({
        'errors':None,
    })
    return HttpResponse(t.render(c))

登录表单,在 login.html 模板中

 <form method="post" action="?next={{ redirect_to }}" >
       <p><label for="username">Username</p>
       <p></label><input type="text" name="username" value="" id="username" /></p>
       <p><label for="password">Password</label></p>
       <p><input type="password" name="password" value="" id="password" /></p>
       <p><input type="submit" value="Login"></p>
 </form>

【问题讨论】:

    标签: django redirect


    【解决方案1】:

    你没有将request 传递给模板上下文,所以它自然是空的。最简单的方法是使用 RequestContext,它使用内置的上下文处理器将变量添加到上下文中。

    执行此操作的常用方法是将render_to_response 与额外参数context_instance=RequestContext(request) 一起使用。出于某种原因,您需要长时间渲染所有模板,因此您需要自己创建请求上下文。

    您还需要将 django.core.context_processors.request 添加到 CONTEXT_PROCESSORS 元组 ins settings.py。

    【讨论】:

    • 哦。为什么render_to_responseHttpResponse 短?
    • 不是。它比对get_templatet.renderHttpResponse 的三个单独调用要短,这就是它的作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2022-01-22
    相关资源
    最近更新 更多