django-registration和redirect包含hashtag

时间:2013-09-05 08:05:27

标签: python django django-registration

我正在使用django-registration来处理我的Django应用程序中的登录和用户注册。我希望用户在成功登录系统后重定向到他们请求的URL(假设他们在最初尝试访问URL时已注销)。

登录网址如下:

http://localhost:8000/accounts/login/?next=/#foo/bar/

但是,登录后,用户始终以http://localhost:8000/结束。我已经用http://localhost:8000/accounts/login/?next=/abc/def/尝试了它并且工作正常,所以我认为主题标签是问题所在。如何解决这个问题(如果有的话)?

更新

我应该提到它是一个单页应用程序,因此标签...

2 个答案:

答案 0 :(得分:1)

我开始逐步执​​行django-registration(实际上是django)代码。我在登录期间找不到任何django-registration正在做的事情,所以我认为它甚至不对这部分负责。

Django在@login_required函数(_wrapped_view(request, *args, **kwargs))中包含django.contrib.auth.decorators个视图函数,并在执行实际函数之前执行身份验证测试。如果发现尚未登录,则会将当前网址设为nextpath = 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的用户根本无法使用该页面。