2013-01-18 46 views
6

我正在運行一個django 1.4.1應用程序。django靜態文件是否跳過中間件?

我不知道,只是包括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) 

我的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 

有什麼事情做的測試服務器如何啓動?

回答

10

我如果您使用django-admin.py runserverpython manage.py runserver只是想通了這一點後發佈...

,那麼它一些額外的魔法添加staticfiles處理程序,您的常規中間件不能碰。

可以通過運行django-admin.py runserver --nostatic禁用此 - 看到django docs

當你這樣做--nostatic它會回落到您的應用程序的URL,例如,如果你有staticfiles_urls()直接:

urlpatterns += staticfiles_urlpatterns() 

那麼你的中間件將運行這些網址(當然還有你的其他所有網站)。

1

嘗試使用中間件修改request.path時發現此問題。

發現的url解析爲request.path_info不是request.path