django staticfiles跳过中间件吗?

MrC*_*les 9 django django-staticfiles

我正在运行django 1.4.1应用程序.

我不知道,只包括django.contrib.staticfilesINSTALLED_APPS您的设置足以让静态文件服务,而settings.DEBUG为真,即,您不必手动添加任何东西到您的网址文件.

我也注意到这绕过了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)
Run Code Online (Sandbox Code Playgroud)

我的urls.py:

from django.conf.urls import patterns, include, url
urlpatterns = patterns('',
    url(r'^$', 'testapp.views.index', name='home'),
)
Run Code Online (Sandbox Code Playgroud)

我的settings.py指定了一个目录来查找静态文件,它还添加了以下内容:

MIDDLEWARE_CLASSES = (
    'testapp.middleware.TestMiddleware',
    ...
)
Run Code Online (Sandbox Code Playgroud)

使用此中间件:

from __future__ import print_function
class TestMiddleware(object):
    def process_request(self, request):
        print("[REQUEST]", request.path)
Run Code Online (Sandbox Code Playgroud)

当我提出请求时,会打印出来:

[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
Run Code Online (Sandbox Code Playgroud)

它与测试服务器的启动方式有关吗?

MrC*_*les 12

发布后我才想到这个...

如果您正在使用django-admin.py runserver或者python manage.py runserver,那么它会添加一个常规中间件无法触及的静态文件处理程序.

您可以通过运行来禁用它django-admin.py runserver --nostatic- 请参阅django文档

当你这样做时--nostatic,它将回退到你的应用程序中的网址,例如,如果你直接包含staticfiles_urls():

urlpatterns += staticfiles_urlpatterns()
Run Code Online (Sandbox Code Playgroud)

然后你的中间件将运行那些网址(当然还有你的其他网址).