我知道 LOGIN_REDIRECT_URL
,我知道
<form action="?next={{ next|default:"/foo" }}" method="post">
在django-registration的login.html模板中 . 这就是我想要发生的事情:
-
如果用户从主页登录,请将其重定向到包含其用户名的URL(/ lists / [username]) .
-
如果用户从任何其他页面登录,请将其返回到他们正在查看的页面 .
twitter.com处理此问题的方法是简单地让登录用户的主页消失 . 我会考虑这样做,而且它很容易解决,但我的主页上还有很多有用的东西,我不确定我是否希望它能够为经过身份验证的用户消失 . 我宁愿重定向他们 .
我想我可以在settings.py中执行条件,其中 LOGIN_REDIRECT_URL
被引用,但请求对象在设置中不可用(因此我可以在登录前知道django-registration 's 1345601 parameter in the template because the username isn' t中这样做) .
解决这个问题的正确/最佳方法是什么?谢谢 .
Update :根据S. Lott的建议,这是我最终使用的(在主页视图中):
if request.user.is_authenticated() and not request.session.get('homepage_redir'):
request.session['homepage_redir'] = True
return HttpResponseRedirect(reverse('list_view',args=[request.user.username]))
在首次从主页登录时,用户被重定向到他们的个人页面并设置了会话变量 . 在对主页的后续请求中,不会发生重定向(因为检测到会话var) . 从任何其他页面重定向登录的代码不受影响 .
2 回答
无论如何,这就是Django所做的 .
使用Django已经提供的功能检查会话并正确地重定向到登录 .
这就是视图功能的用途 .
如果请求会话为空,则它们只是登录 . 在会话中设置标志并返回重定向到所需页面 . 请务必使用
reverse
函数 - 不要在应用程序的任何位置对URL进行编码 . 永远 .警告:这是hackish .
你介意做两次重定向吗?这样,您的
LOGIN_REDIRECT_URL
可以是标识已登录用户的视图,并将请求重定向到用户的相应主页(/lists/username/
)这将花费您两个重定向而不是通常的重定向 . 首先,登录到视图,然后从视图到主页 .