所以我在我的URL配置中设置了一个路径:
path(
"kitten/",
views.Kitten.as_view(),
name="kitten",
),
和一个处理程序,用于处理同一视图中丢失的URL.
handler404 = views.Kitten.as_view()
我有一些中间件,可以设置一些上下文数据:
class CookieConsentMiddleware:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
return self.get_response(request)
def process_template_response(self, request, response):
response.context_data["hasCookie"] = False
return response
这个观点很直截了当,
class Kitten(TemplateView):
template_name = "kitten.html"
模板打印hasCookie
的值.
访问kitten/
会正确显示hasCookie
的值,但访问不存在的URL时,不会显示hasCookie的值(同时显示正确的模板)
将调试语句添加到中间件中,很明显,虽然为kitten/
调用了process_view
、process_template_response
和process_exception
,但这些都不是为不存在的URL调用的,因此没有调用代码来设置hasCookie
的值.(无论应用程序启动时如何调用__init__
)
Why does it not call the middleware when the URL is not found in the URLconf?