1

私の開発システム (mac os x) では、urls.py ファイルの最後に次の行を追加しました。

if re.match('darwin',sys.platform):
# serving media files using the development server
    urlpatterns += patterns('',(r'^site_media/(?P<path>.*)$',
        'django.views.static.serve',
        {'document_root': '/Users/henri/sites_django/wmsproject/wmssite/site_media'}),)

メディアファイルを提供するため。

すべてが期待どおりに進みます。まあ、ほぼ...

ビューが呼び出される前に処理をインターセプトするミドルウェア クラスを含めました。このミドルウェアでは、process_view 関数を定義しました。期待どおりに動作しないため、次のように、この関数の最初の行として「assert False」を挿入しました。

def process_view(self, request, view_func, view_args, view_kwargs):
    assert False

この URL をブラウザに入力すると、次のようになります。

http://localhost:8000/site_media/images/logo_wms_web.gif

驚いたことに、ダンプに次の情報が表示されます。

self         <wmssite.middleware.LanguageMiddleware.LanguageRedirect instance at 0x10117fe60>
view_args    {}
view_func    <function serve at 0x101281578>
view_kwargs  {'document_root': '/Users/henri/sites_django/wmsproject/wmssite/site_media', 'path': u'images/logo_wms_web.gif'}

ダンプに表示されるパラメーターは、先ほど示した urls.py ファイルに表示されたパラメーターとまったく同じです。URLディスパッチはビューが呼び出される前に(明らかに)発生しますが、ミドルウェアはURLディスパッチの後、ビューを呼び出す前に呼び出されると思いました。しかし、これはミドルウェアが URL ディスパッチの前に呼び出されているように見えます。

それで、私はそれを間違えたようです。URLディスパッチに関連してミドルウェアが正確にいつ呼び出されるかを誰か説明できますか?

4

1 に答える 1

2

URL ディスパッチの前にミドルウェアが呼び出されているという結論に至るトレースバックの内容は何ですか? それどころか、それが送信されているビューの名前を明確に持っているため、ビューを呼び出す前に呼び出されていることは明らかです - serve、つまりdjango.views.static.serve、urls.pyで定義されています。

于 2010-10-18T15:16:49.530 に答える