中间件未在404上执行

时间:2012-10-01 22:59:26

标签: django

我们有中间件记录用户访问过的最后一个网址:

class LastSiteUrl(object):

    def is_admin_url(self, url):
        if re.search('^(http:\/\/.*){0,1}\/admin\/', url) is None: return(False)
        else: return(True)

    def process_request(self, request):
        if self.is_admin_url(request.path) and \
            not self.is_admin_url(request.META['HTTP_REFERER']):
            request.session['last_site_url'] = request.META['HTTP_REFERER']

我们使用它将它们返回到他们所在的最后一个应用页面, 从管理页面,无论他们有多深入管理员。这是 工作正常。

我们有一个自定义的404页面,从那里我想提供一个链接 把他们带回应用程序中的位置。但似乎是 中间件在转到无效页面时不会运行。有没有 在这种情况下让它运行的方式呢?

1 个答案:

答案 0 :(得分:1)

如果您在基础urls.py中使用handler404,则可以从django视图而不是直接从服务器提供404页面,并按照您对任何其他django视图的方式添加该中间件。

https://docs.djangoproject.com/en/dev/ref/urls/#django.conf.urls.handler404

在urls.py中

handler404 = 'app.views.view'

handler404 = ClassView.as_view()