django - django静态文件会跳过中间件吗?

标签 django django-staticfiles

我正在运行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 runserverpython 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/

相关文章:

python - 如何在django上添加评论

python - pylint_django 抛出异常

Django - 从另一个应用程序加载静态文件

django - 更快地替代 manage.py collectstatic(带 s3boto 存储后端)将静态文件同步到 s3?

python - collectstatic 生成的文件未在 Django 中提供

python - 有什么方法可以在python中使用get with object而不是dict

python - 如何在 Django 中连接两个模型的结果?

Django:测试完成后如何保留测试数据库?

html - Django CSS 仅适用于某些元素

python - Django-compressor/django-storages 链接被错误缓存;即将到期