我正在运行Django 1.4.1应用。
我没有意识到仅在设置中将django.contrib.staticfiles
包含在INSTALLED_APPS
中就足以在settings.DEBUG
为True的情况下提供静态文件,即,您不必手动将任何文件添加到urls文件中。
我还注意到,这绕过了django中间件。有谁知道这是怎么发生或为什么发生的?
我刚刚创建了一个空白的新项目,我的views.py:
from django.http import HttpResponse
def index(request):
html = '<html><body>Logo: <img src="/static/logo.gif"></body></html>'
return HttpResponse(html)
我的urls.py:
from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
url(r'^$', 'testapp.views.index', name='home'),
)
我的settings.py已指定一个目录来查找静态文件,并且还添加了以下内容:
MIDDLEWARE_CLASSES = (
'testapp.middleware.TestMiddleware',
...
)
使用此中间件:
from __future__ import print_function
class TestMiddleware(object):
def process_request(self, request):
print("[REQUEST]", request.path)
当我发出请求时,此信息会打印出来:
[REQUEST] /
[18/Jan/2013 15:30:27] "GET / HTTP/1.1" 200 60
[18/Jan/2013 15:30:27] "GET /static/logo.gif HTTP/1.1" 200 2190
[REQUEST] /favicon.ico
与测试服务器的启动方式有关吗?
最佳答案
发布后我才想通了...
如果您使用的是django-admin.py runserver
或python manage.py runserver
,那么添加一个常规中间件无法触及的staticfiles处理程序会产生一些额外的魔力。
您可以通过运行django-admin.py runserver --nostatic
禁用此功能-请参阅django docs
并且当您执行--nostatic
时,它会退回到应用程序中的网址,例如,如果您直接通过以下方式包含staticfiles_urls():
urlpatterns += staticfiles_urlpatterns()
那么您的中间件将针对这些网址(当然还有其他所有网址)运行。
关于django - django静态文件会跳过中间件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14408017/