如何配置登录表单重定向到特定的url?
问题描述:
当用户访问http://myserver/accounts/login/?next=/sentry
,就应该及时登录凭证,然后重定向到/sentry
。这是如果您使用装饰器login_required
的行为。我没有使用这个装饰器。
症状
目前,登录成功后,将其重定向到/accounts/profile
即使设置了next
查询参数。
问题
- 我在哪里可以覆盖默认重定向URL
/accounts/profile
? - 为什么传递
next
不够?
答
要覆盖默认重定向目标,请设置LOGIN_REDIRECT_URL
设置,默认设置为/accounts/profile
。
https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-LOGIN_REDIRECT_URL
你用你自己的观点和login()
功能我不能回答不知道你是如何登录用户的问题的另一部分。?在这种情况下,您需要自己处理next
参数。
如果您使用通用视图,则可以传递redirect_field_name
参数,该参数默认为“下一个”。
https://docs.djangoproject.com/en/dev/topics/auth/#django.contrib.auth.views.login
答
首先,你可以通过在settings.py设置LOGIN_REDIRECT_URL
覆盖默认重定向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
。
你可以通过提供一些你的urls.py文件和你正在使用的模板来帮助你。 –