Moh*_*d B 3 python django django-templates django-forms django-views
我正在使用 Django 的内置登录视图,如下面的代码片段所示:
网址.py
url(r'^login$',login,{'template_name': 'login.html'},name="login"),
Run Code Online (Sandbox Code Playgroud)
模板.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>
Run Code Online (Sandbox Code Playgroud)
如何使用下一个变量重定向到与 django 重定向到的默认/accounts/profile/不同的 URL ?我知道有人提到 settings.py 文件,但我想知道如何利用下一个变量来做到这一点?
(即使在参考文档后,我也不确定下一个变量是如何工作的,对此的解释将不胜感激)
如果您使用的是 django 登录视图,即,
from django.contrib.auth.views import login
Run Code Online (Sandbox Code Playgroud)
您只需要将下一个 url 传递给模板。所以当请求被发送到登录视图时,代码就可以重定向到那个 url。没有找到下一个网址
settings.LOGIN_REDIRECT_URL is used
Run Code Online (Sandbox Code Playgroud)
你可以简单地传递下一个网址,就像,
<form method="post" action="{% url 'login' %}?next={{next_url}}">
Run Code Online (Sandbox Code Playgroud)
通过上下文传递“next_url”值。
下一种情况,如果您需要为任何自定义视图进行下一个 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
Run Code Online (Sandbox Code Playgroud)
为了消除您对 next 变量如何工作的疑问:在上面的视图中,我们得到了一个 http 请求,并且我们是否已将下一个 url 作为查询参数传递。我们将在视图中获取它。"request.GET.get(next, '')" 会得到你从视图中发送的下一个 url。从视图级别,您可以执行所需的功能,然后如果下一个 url 存在且有效,您可以使用 HttpResponseRedirect 重定向到下一个 url。
对于登录参考:Django:登录后重定向到上一页
| 归档时间: |
|
| 查看次数: |
7897 次 |
| 最近记录: |