我正在使用Django内置的登录视图,如以下代码段所示:
urls.py
url(r'^login$',login,{'template_name': 'login.html'},name="login"),
template.html
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<table>
<tr>
<td>{{ form.username.label_tag }}</td>
<td>{{ form.username }}</td>
</tr>
<tr>
<td>{{ form.password.label_tag }}</td>
<td>{{ form.password }}</td>
</tr>
</table>
<input type="submit" value="login" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
如何使用下一个变量重定向到与django重定向到的默认 / accounts / profile / 不同的网址?我知道有人引用了settings.py文件,但我想知道如何利用下一个变量来做到这一点?
(即使在参考文档之后我也不确定下一个变量是如何工作的,对此的解释将非常感激)
答案 0 :(得分:3)
如果您使用的是django登录视图,即
from django.contrib.auth.views import login
您只需将下一个网址传递给模板即可。因此,当请求发送到登录视图时,代码就会重定向到该URL。没有找到下一个网址
settings.LOGIN_REDIRECT_URL is used
您可以简单地传递下一个网址,就像
一样<form method="post" action="{% url 'login' %}?next={{next_url}}">
传递&#34; next_url&#34;价值通过上下文。
下一种情况,如果您需要为任何自定义视图进行下一个URL重定向,只需在视图中编写代码以获取下一个URL,并在视图中执行作业后,您可以重定向到下一个URL。
from django.utils.http import is_safe_url
def your_view(request):
# do your codes
redirect_to = request.GET.get(next, '') # use get or Post as per your requirement
if is_safe_url(url=redirect_to, host=request.get_host()):
HttpResponseRedirect(redirect_to)
else:
# your response
清除您对下一个变量如何工作的疑问:在上面的视图中,我们得到一个http请求,如果我们已经将下一个url作为查询参数传递。我们将在视图中得到它。 &#34; request.GET.get(next,&#39;&#39;)&#34;将为您提供从视图发送的下一个网址。从视图级别,您可以执行所需的功能,然后如果下一个URL存在且有效,您可以使用HttpResponseRedirect重定向到下一个URL。