中间件类创建了但未执行process_template_response
我定义了一个中间件类,并把它添加到了设置中的 middleware_classes 属性里。当有请求进来时,这个中间件类会被创建(调试器会在 CommonFiilter(): 这一行的断点处捕捉到代码)。
现在我期待函数 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 个回答
1
来自文档:
process_template_response() 这个方法只有在响应实例有一个叫 render() 的方法时才会被调用,这说明它是一个 TemplateResponse。