这似乎是一个非常简单的问题,但我无法让它发挥作用。如果特定视图函数中存在?next=.....
装饰器,则django-registration将传递正确的@login_required
。用户登录后,用户将被重定向到他想要查看的页面。这很好,工作正常。
我的问题是我有这个不需要登录的html页面,但是如果你想登录,我有一个<a href='{% url auth_login>
。如果用户从此html登录,则?next=
会显示空白,并重定向到默认位置accounts/profile/
。我还没有设置用户个人资料,因此出现TemplateDoesNotExist
错误。
我有这样的事情:
views.py
...
def display_all(request):
response = list_detail.object_list(
request,
queryset = MyModel.objects.all(),
template_name = 'show_all.html'
)
return response
-
show_all.html
<html>
<head>
<title> Display Everything </title>
</head>
<body>
<a href='{% url auth_login %}?next={{ request.path }}'>Login</a>
<h1> Displaying all items! </h1>
<ul>
{% for item in object_list %}
<li> {{ item.name }} </li>
{% endfor %}
</ul>
</body>
</html>
在这里,我通过列出来显示所有内容,如果你想登录,我在顶部有一个登录链接。{{ request.path }}
返回一个空字符串,所以我得到的最终结果是http://localhost:8000/accounts/login/?next=
它将重定向到默认accounts/profile/
。
答案 0 :(得分:4)
如果问题是request.path为空,则需要在settings.py中向TEMPLATE_CONTEXT_PROCESSORS添加“django.core.context_processors.request”。 看django docs
答案 1 :(得分:0)
用于填充 RequestContext 中的上下文的可调用元组。这些可调用对象将请求对象作为其参数,并返回要合并到上下文中的项的字典。
TEMPLATE_CONTEXT_PROCESSORS默认值: https://docs.djangoproject.com/en/dev/ref/settings/#template-context-processors