2

我有自定义中间件,当我将它添加到我的 settings.py 中的 MIDDLEWARE_CLASSES 元组时,网站上的所有 css 和图像都会消失,只留下文本。

中间件.py

from django.shortcuts import redirect
from django.core import urlresolvers

class AcceptTOSMiddleware(object):
    def process_request(self, request):
        login_url = urlresolvers.reverse('login')
        tos_url = urlresolvers.reverse('tos')
        if request.path not in [login_url, tos_url]:
            profile = request.user.get_profile()
            if not profile.tos:
                return redirect(tos_url)
        return None

设置.py

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.locale.LocaleMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware',
    'pagination.middleware.PaginationMiddleware',
    'utils.middleware.AcceptTOSMiddleware'
)

有谁知道为什么会发生这种情况?

4

2 回答 2

2
  1. 这应该只发生在 development 中,否则 HTTPD 将为静态文件提供服务,并且 django 方面将没有任何东西可以阻止它,

  2. 阅读 runserver 的控制台输出,它应该显示对静态文件的请求以 3xx 重定向响应(可能是 301),

  3. 对于开发,您的中间件还应该检查是否request.path不以settings.STATIC_URLnor开头settings.MEDIA_URLreturn None在这种情况下。

于 2012-11-07T16:13:43.650 回答
1

听起来您正在通过 Django 提供静态文件;也许您正在使用开发服务器?

如所写,您的中间件将重定向到任何与登录无关的路径,包括图像和 CSS。您还可以排除 STATIC_URL 和 MEDIA_URL 下的所有内容。

于 2012-11-07T16:15:46.453 回答