中间件类创建了但未执行process_template_response

0 投票
1 回答
648 浏览
提问于 2025-04-17 03:19

我定义了一个中间件类,并把它添加到了设置中的 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。

撰写回答