我有自定义中间件,当我将它添加到我的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'
)
有谁知道为什么会这样?
答案 0 :(得分:2)
这应该只在开发中发生,否则HTTPD将提供静态文件,并且django一侧没有任何东西可以阻止它,
读取runserver的控制台输出,它应该显示对静态文件的请求以3xx重定向(可能是301)响应,
对于开发,如果request.path
不是以settings.STATIC_URL
开头,也不是settings.MEDIA_URL
,那么您的中间件应也检查,return None
在那种情况下。
答案 1 :(得分:1)
听起来你正在通过Django提供静态文件;也许你正在使用开发服务器?
正如所写,您的中间件将重定向到任何与登录无关的路径,包括图像和CSS。您也可以在STATIC_URL和MEDIA_URL下排除所有内容。