如何配置登录表单以重定向到特定URL?

时间:2011-09-02 10:16:31

标签: django

目标

当用户访问http://myserver/accounts/login/?next=/sentry时,应提示输入登录凭据,然后重定向到/sentry。如果您使用login_required装饰器,则会出现这种情况。我没有使用那个装饰器。

症状

目前,成功登录后,即使提供了/accounts/profile查询参数,也会重定向到next

问题

  1. 我在哪里覆盖默认重定向网址/accounts/profile
  2. 为什么传递next不够?

2 个答案:

答案 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