我在Django 1.6项目中使用django-braces's LoginRequiredMixin。这个mixin复制了Django的login_required装饰器。
我有一个使用LoginRequiredMixin
的视图,其中包含以下网址:/spa_home/#price_requests/68
。如果我尝试在未登录的情况下点击此URL,则mixin会正确地将我发送到登录页面,其中包含以下请求:/accounts/login/?next=/spa_home/#price_requests/68
。不幸的是,在成功登录后,URL哈希片段被取消,我只是被重定向到/spa_home/
。
解决此问题的最佳方法是什么?从我的应用程序中删除哈希片段将是一项巨大的努力。
答案 0 :(得分:2)
问题在于浏览器解释登录URL的方式。你希望它像这样解释:
/accounts/login/?next="/spa_home/#price_requests/68"
但实际上,它看起来像这样:
"/accounts/login/?next=/spa_home/"#price_requests/68
换句话说,哈希被视为附加到登录URL本身,而不是重定向参数。
解决这个问题的方法是引用参数:
urllib.quote('/spa_home/#price_requests/68')
,它会为您提供/spa_home/%23price_requests/68
,这将被正确解释。