识别Django代码中的错误,导致我的应用程序在浏览器中无限重定向

时间:2016-03-29 14:56:42

标签: python django django-templates django-views

我有一个Django模板,列出了用户所属的所有聊天组。单击显示的组的名称将使用户进入所述组。这是一个简单的HTML GET请求:<a href="{% url 'private_group' unique %}">Group name</a>,其中unique是与该群组相关的uuid。

目前,点击群组名称会向我发送无限重定向(最后一直给出的输出)。到底是怎么回事?请帮我解决,详情如下:

urls.py 的相关部分是:

urlpatterns = patterns('',
url(r'^group/(?P<slug>[\w.@+-]+)/$', auth(private_group), name='private_group'),
url(r'^group/private/$', auth(PrivateGroupView.as_view()), name='private_group_reply'),
)

private_group是一个简单的视图方法,如下所示:

def private_group(request, slug=None, *args, **kwargs):
    request.session['unique_id'] = slug #setting session variable
    return redirect("private_group_reply")

另一方面,private_group_reply是基于类的视图。一些视图代码如下(由于我假设它们不相关,因此删除了大量的行):

class PrivateGroupView(CreateView):
    model = Reply
    form_class = PrivateGroupReplyForm      
    template_name = "private_group_reply.html"

    def get_context_data(self, **kwargs):
        context = super(PrivateGroupView, self).get_context_data(**kwargs)
        if self.request.user.is_authenticated():
            unique = self.request.session['unique_id'] #reading session variable
            context["unique"] = unique
            return context

如果这还不够,请向我询问更多信息。

无限重定向:

[29/Mar/2016 19:37:56] "GET /groups/ HTTP/1.1" 200 10077
[29/Mar/2016 19:37:58] "GET /group/12bcd803-2e1a-47b4-9b91-dff279a82a73/ HTTP/1.1" 302 0
[29/Mar/2016 19:37:58] "GET /group/private/ HTTP/1.1" 302 0
[29/Mar/2016 19:37:58] "GET /group/private/ HTTP/1.1" 302 0
[29/Mar/2016 19:37:58] "GET /group/private/ HTTP/1.1" 302 0
[29/Mar/2016 19:37:58] "GET /group/private/ HTTP/1.1" 302 0
[29/Mar/2016 19:37:58] "GET /group/private/ HTTP/1.1" 302 0
[29/Mar/2016 19:37:58] "GET /group/private/ HTTP/1.1" 302 0

1 个答案:

答案 0 :(得分:4)

(?P<slug>[\w.@+-]+)匹配字符串&#34; private&#34;。这意味着您的重定向到/ group / private始终被private_group视图捕获,该视图会重定向回自身。

交换这些网址的顺序,以便私有网址排在第一位。