我正在使用django-registration来处理我的Django应用程序中的登录和用户注册。我希望用户在成功登录系统后重定向到他们请求的URL(假设他们在最初尝试访问URL时已注销)。
登录网址如下:
http://localhost:8000/accounts/login/?next=/#foo/bar/
但是,登录后,用户始终以http://localhost:8000/
结束。我已经用http://localhost:8000/accounts/login/?next=/abc/def/
尝试了它并且工作正常,所以我认为主题标签是问题所在。如何解决这个问题(如果有的话)?
我应该提到它是一个单页应用程序,因此标签...
答案 0 :(得分:1)
我开始逐步执行django-registration(实际上是django)代码。我在登录期间找不到任何django-registration正在做的事情,所以我认为它甚至不对这部分负责。
Django在@login_required
函数(_wrapped_view(request, *args, **kwargs)
)中包含django.contrib.auth.decorators
个视图函数,并在执行实际函数之前执行身份验证测试。如果发现尚未登录,则会将当前网址设为next
(path = request.build_absolute_uri()
)并开始登录。但是,request.build_absolute_uri()
甚至不返回主题标记网址。提取网址的#-appended部分通常似乎不是possible。
答案 1 :(得分:0)
对不起死灵法师,但我用以下方法解决了这个问题:
我有一个登录表单的模板,其中包含以下内容:
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<input type="hidden" id="hidden_next" name="next" value="{{ next }}">
... the actual form here ...
</form>
和(我正在使用JQuery)最后的脚本:
<script>$(function () {
$("#hidden_next").attr(
"value", "{{ next }}" +
$(location).attr('hash'))
});
</script>
请注意,我正在重复{{ next }}
,以防用户禁用Javascript。在单页面应用中,这不是问题,因为禁用javascript的用户根本无法使用该页面。