正在创建中间件类但未执行process_template_response

时间:2011-09-29 00:02:45

标签: python django templates response middleware

我定义了一个中间件类。我已将其添加到设置中的middleware_classes属性。当请求进入时,中间件类被创建(当断点在类CommonFiilter()上时,调试器捕获代码:line)

现在我希望函数def process_template_response(self,request,response):被调用。我在函数内部有调试点,调试器永远不会捕获执行。但是,调试器将执行捕获到定义函数名称和参数的行。 这是班级:

class CommonFilter():#<---- debugger breaks here
def process_template_response(self, request, response): #<--- debugger breaks here
    if response.template_name=='store/index2.html': #<--- NOT HERE (or after this line)
        catnames=getCategories()
        response.context_data.update({'catnames':catnames,'user':request.GET.get(key='user',default=None)})
    return response

还试过这个:

class CommonFilter():#<---- debugger breaks here
def process_template_response(self, request, response):#<---- debugger breaks here
    if response.template_name=='store/index2.html':#<--- NOT HERE (or after here)
        catnames=getCategories()
        response.context_data['catnames']=catnames
        response.context_data['user']=request.GET.get(key='user',default=None)
    return response

以防万一,这是设置MIDDLEWWARE_CLASSES变量:

MIDDLEWARE_CLASSES = (
                  'store.models.CommonFilter',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)

store是此项目中的一个应用程序,当然CommonFilter在models.py中定义。

为什么函数process_template_response函数没有被执行?

感谢您的时间和关心。

1 个答案:

答案 0 :(得分:1)

来自docs

  只有在响应时才会调用

process_template_response()   instance有一个render()方法,表明它是一个   TemplateResponse。