由于对 jsi18n 的请求,Django 中间件运行了两次

Django middleware runs twice because of request to jsi18n

运行 django 3.2 上的一个非常简单的中间件,我在每个页面加载之前向用户显示通知。执行此操作的代码看起来像他的:

from django.contrib import messages
class ChangeNotifierMiddleware(object):
    def __init__(self, get_response):
        self.get_response = get_response
        
    def __call__(self, request):
        messages.add_message(request, messages.INFO,"test")
        response = self.get_response(request)

然而,问题就像 Django: custom middleware called twice 中一样,每个请求都会执行两次此中间件。这 发生在 django 管理界面中,不是因为对图标的请求,而是因为对 /admin/jsi18n/ 的请求。这使得这个问题的原因有所不同(我没有在任何地方为 jsi18n 指定任何 url)

所有这一切的结果是,在我这边的前端,我收到一条通知,上面写着“测试”,这是应该的。在 backend/admin 界面上,我收到两条通知说“测试”。 我怎样才能在页面加载前只制作一次 Django 中间件 运行,有没有办法保证代码只 运行 一次?

看来 jsi18n 应该会为 javascript 活动提供正确的语言翻译。

您可以跳过为所有包含“jsi18n”的网址添加消息的步骤if "jsi18n" not in request.path

from django.contrib import messages
class ChangeNotifierMiddleware(object):
    def __init__(self, get_response):
        self.get_response = get_response
        
    def __call__(self, request):
        if "jsi18n" not in request.path:
            messages.add_message(request, messages.INFO,"test")
        response = self.get_response(request)