目标
当用户访问http://myserver/accounts/login/?next=/sentry
时,应提示输入登录凭据,然后重定向到/sentry
。如果您使用login_required
装饰器,则会出现这种情况。我没有使用那个装饰器。
症状
目前,成功登录后,即使提供了/accounts/profile
查询参数,也会重定向到next
。
问题
/accounts/profile
? next
不够?答案 0 :(得分:2)
要覆盖默认重定向目标,请设置LOGIN_REDIRECT_URL
设置,默认设置为/accounts/profile
。
https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-LOGIN_REDIRECT_URL
如果不知道如何记录用户,我无法回答问题的其他部分。您使用自己的视图和login()
功能吗?在这种情况下,您需要自己处理next
参数。
如果您使用的是通用视图,则可以传递redirect_field_name
参数,默认为“next”。
https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.views.login
答案 1 :(得分:1)
首先,您可以通过在settings.py中设置LOGIN_REDIRECT_URL
来覆盖默认重定向网址。
在回答问题的第二部分时 - 您需要确保登录模板中的表单中包含next
的隐藏输入。你的模板是什么样的?它需要包含这样的东西:
<form method='post'>{% csrf_token %}
{{ form.as_p }}
<input type="hidden" name="next" value="{{ next }}">
<input type="submit" value="Log in" class="big_button">
</form>
如果您已将redirect_field_name
作为参数传递给登录视图,那么您需要将其作为输入的名称而不是next
。