9

私はdjango 1.4.1アプリを実行しています。

が True のときに静的ファイルを提供するには、設定に を含めるだけで十分でdjango.contrib.staticfilesあることに気付きませんでした。つまり、手動で urls ファイルに何も追加する必要はありません。INSTALLED_APPSsettings.DEBUG

また、これが django ミドルウェアをバイパスしていることにも気付きました。誰がどのように、またはなぜこれが起こるのか知っていますか?


空の新しいプロジェクト my 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

テストサーバーの起動方法と関係がありますか?

4

2 に答える 2

14

投稿後にこれを理解しました…</p>

django-admin.py runserverまたはを使用している場合はpython manage.py runserver、通常のミドルウェアでは処理できない staticfiles ハンドラーを追加する特別な魔法が実行されます。

実行することでこれを無効にすることができますdjango-admin.py runserver --nostaticdjango docsを参照してください

そして、それを行う--nostaticと、次のように staticfiles_urls() を直接含める場合など、アプリの URL にフォールバックします。

urlpatterns += staticfiles_urlpatterns()

その後、ミドルウェアはそれらの URL (およびもちろん他のすべての URL) に対して実行されます。

于 2013-01-18T21:45:46.933 に答える
1

ミドルウェアで request.path を変更しようとしたときに、この問題が見つかりました。

検出された URL はrequest.path_infonotに対して解決されますrequest.path

于 2014-02-14T02:19:07.870 に答える