1

常緑の問題、静的ファイルが提供されないために立ち往生しています。 逆に、サブツリーに配置されたファイルは、の下で正しく提供されます。 MEDIA_ROOTMEDIA_URL

剥ぎ取られたsettings.py

DEBUG = True
STATIC_URL = '/static/'
STATIC_ROOT = '/home/foo/devel/static'
MEDIA_URL = '/media/'
MEDIA_ROOT = '/home/foo/devel/media'
# the following is deprecated but is it seems grappelly requires it
ADMIN_MEDIA_PREFIX = STATIC_URL + "grappelli/"
STATIC_FILES = ()
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

私が行ったプロジェクトを作成するには:

$ cd /home/foo/devel/
$ virtualenv testdrive
$ . bin/activate; pip install django; cd testdrive
$ django-admin.py fbtest

そして、このディレクトリツリーを取得しました(削除):

. <-- /home/foo/devel/
├── bin
├── fbtest
│   └── fbtest
│       ├── media
│       │   └── foo.jpg
│       ├── static
│       └────── foo.jpg
├── include
└── lib

下のファイルSTATIC_URLはDjangostaticfiles(私の場合ではない)によって自動的に提供される必要がありますが、他のファイルは手動で処理する必要があります。urls.pyだから私はこれらの行を:に追加しました

import settings
if settings.DEBUG:
    urlpatterns += patterns('',
        url(r'^%s(?P<path>.*)$' % settings.MEDIA_URL.lstrip("/"),
            'django.views.static.serve', {
            'document_root': settings.MEDIA_ROOT,
        }),
    )

アクセスhttp://host/media/filebrowser/foo.jpgは機能しhttp://host/static/foo.jpgますが、エラー404が発生します。なぜですか?

4

3 に答える 3

6

下のファイルSTATIC_URLはDjangostaticfiles(私の場合ではない)によって自動的に提供される必要がありますが、他のファイルは手動で処理する必要があります。

それは正しくありません。DjangoはSTATIC_ROOT、開発中であっても、これまでサービスを提供することはありません。各アプリの「静的」ディレクトリにあるファイルと、で指定されている任意のディレクトリにあるファイルSTATICFILES_DIRSをで利用できるようにしSTATIC_URLます。実際に手動で何かを入れることはありませんSTATIC_ROOT。実際、開発では、そこにディレクトリを置くべきではありません。簡単に言えば、管理コマンドを実行するときの本番STATIC_ROOT環境での静的ファイルのダンプグラウンドにすぎません。collectstatic

開発では、すべての静的ファイルをに入れる必要がありますsomeapp/static。ここで、「someapp」はそれらが適用されるアプリです。ファイルがプロジェクト全体に適用される場合、たとえばグローバルCSSファイルの場合、完全に異なるディレクトリ(つまり、またはと同じではない)を作成してから、そのディレクトリをに追加する必要があります。たとえば、私は通常、自分の資産を「資産」と呼んでいます。STATIC_ROOTMEDIA_ROOTSTATICFILES_DIRS

STATICFILES_DIRS = (
    os.path.join(os.path.dirname(__file__), 'assets'),
)
于 2012-06-12T21:42:12.457 に答える
1

それはばかげた誤りでした。fbtestに追加するのを忘れたINSTALLED_APPSので、静的ファイル機構はこのアプリの静的ファイルを管理しませんでした。

于 2012-06-12T21:42:41.567 に答える
0

この問題は本当に常緑です...いくつかのヒント:

TEMPLATE_CONTEXT_PROCESSORS = (
    # ...
    'django.core.context_processors.static',
    # ...
)

INSTALLED_APPS = (
    # ...
    'django.contrib.staticfiles',
    # ... 
)
  • 使用しましたか?django-admin-collectstaticコマンド?
  • URL設定にshow_indexes=Trueを追加するのを手伝ってもらえますか?
  • いくつかのシンボリックリンク?
  • --adminmedia = .. / grappelli / static / grappelli arg。?を使用してアプリを実行します

django 1.4(grappelliなし)の設定:

urls.py

if settings.DEBUG:
    urlpatterns = patterns('',

        url(r'^%s(?P<path>.*)$' % settings.STATIC_URL.lstrip('/'), 'django.views.static.serve',
            {'document_root': settings.STATIC_ROOT, "show_indexes": True}),

        url(r'^%s(?P<path>.*)$' % settings.MEDIA_URL.lstrip('/'), 'django.views.static.serve',
            {'document_root': settings.MEDIA_ROOT, "show_indexes": True}),

    ) + urlpatterns

settings.py

MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media')
STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')
MEDIA_URL = '/media/'
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/static/admin/'


TEMPLATE_CONTEXT_PROCESSORS = (
    # ...
    'django.core.context_processors.static',
    # ...
)

INSTALLED_APPS = (
    # ...
    # 'django.contrib.staticfiles',
    # ...
)
于 2012-06-12T20:33:23.373 に答える