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

Jav*_*ier 1 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')) 
Run Code Online (Sandbox Code Playgroud)

我收到以下错误,可以快速浏览一下我的服务器:

This webpage has a redirect loop
Run Code Online (Sandbox Code Playgroud)

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

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

这也是我的网址匹配器:

url(r'^terms/', 'hana.views.terms', name='terms')
Run Code Online (Sandbox Code Playgroud)

我如何摆脱这种重定向循环,并使用中间件将注册用户重定向到协议条款页面?

Mic*_*elB 5

好了,也处理了对条款页面的请求,如果filled_terms是None,它将重定向到“条款”页面,这就是您的循环。

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

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'))
Run Code Online (Sandbox Code Playgroud)

这样,仅当请求不针对重定向页面时,才执行重定向。