由django中间件引起的重定向循环

时间:2015-06-23 02:50:35

标签: python django redirect middleware django-middleware

我正在尝试在注册后立即重定向用户,以转到协议页面条款。

这是我的中间件类:

class TermsMiddleware(object):

    def process_request(self, request):
        if request.user.profile.filled_terms is None:
            return redirect(reverse('terms')) 

我收到以下错误,我可以通过快速浏览一下我的服务器来确认:

This webpage has a redirect loop

我有一个带有filled_terms字段的Profile模型类。

我有一个术语模板,当我手动转到它时工作得很好。

这也是我的网址匹配器:

url(r'^terms/', 'hana.views.terms', name='terms')

如何摆脱此重定向循环并将注册用户重定向到中间件到协议页面的条款?

1 个答案:

答案 0 :(得分:4)

嗯,处理条款页面的请求也是如此,如果filled_termsNone,它会重定向到条款页面,这就是......这就是你的循环。

因此,解决此问题的一种方法是检查中间件是否当前请求是针对重定向页面的路径:

class TermsMiddleware(object):

    def process_request(self, request):
        if request.user.profile.filled_terms is None:
            if not request.path == reverse('terms'):
                return redirect(reverse('terms'))

如果请求不是针对重定向页面,那么您只会执行重定向。