Django模板样式和CSS随中间件消失

时间:2012-11-07 16:07:48

标签: django django-models django-forms django-templates django-views

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

middleware.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

settings.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'
)

有谁知道为什么会这样?

2 个答案:

答案 0 :(得分:2)

  1. 这应该只在开发中发生,否则HTTPD将提供静态文件,并且django一侧没有任何东西可以阻止它,

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

  3. 对于开发,如果request.path不是以settings.STATIC_URL开头,也不是settings.MEDIA_URL,那么您的中间件应也检查return None在那种情况下。

答案 1 :(得分:1)

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

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