Djangoの staticfiles app に少し問題があります。
私が追加しました
'Django.contrib.staticfiles',
私のINSTALLED_APPSに追加しました
STATIC_URL = '/static/'
STATIC_ROOT = '/Users/kevdotbadger/Django/mylook/static/'
settings.py
ファイルに。
すべての静的ファイルは、MacのSTATIC_ROOT
フォルダー内にあります。
今、私のテンプレート内で使用します
{{ STATIC_URL }}
/static/
に正しくレンダリングされます。
しかしながら
{{ STATIC_URL }}css/style.css
404エラーが発生します。サーバーとして「runserver」コマンドを使用しています。
私が欠けているものはありますか?
こちらのハウツードキュメントをお読みください: http://docs.djangoproject.com/en/dev/howto/static-files/
要するに、STATIC_ROOTは、collectstatic manangementコマンドを呼び出す場合にのみ使用されます。静的ファイルを提供するために、ディレクトリをSTATICFILES_DIRS設定に追加する必要はありません!
開発中(自動検索ビューが使用されている場合)、静的ファイルはさまざまな場所で静的ファイルを自動的に検索します(静的ファイルへのパスを使用して「serv」ビューを呼び出すため)。この検索では、「ファインダー」と呼ばれるものを使用します(STATICFILES_FINDERS設定で定義されています)。
デフォルトのファインダの1つはAppDirectoriesFinderです。これは、INSTALLED_APPS設定の各アプリの「/ static /」ディレクトリを検索します。
別のデフォルトのFinderはFileSystemFinderで、STATICFILES_DIRS設定で指定したディレクトリを検索します。
ところで、これらの検索パターンは両方とも、テンプレートのロードの仕組みに似ています。
Collectstaticコマンドの実行時に同じ手法が使用されますが、さまざまな場所からファイルを収集し(上記と同じファインダーを使用)、見つかったファイルをSTATIC_ROOTに配置し、展開の準備が整います。
開発中にプロジェクトのグローバルな静的ファイルを提供するための迅速で簡単な回避策を見つけました。
ソリューションだけが必要な場合は、「ソリューション」までスクロールします。
昨日、同じ問題を発見していました。ここに私が見つけたものがあります:
必要なのは、STATIC_ROOTとそのすべてのコンテンツを見つける適切な静的Finderだけですが、そのようなFinderはありません。デフォルトのファインダーは次のとおりです。
Django.contrib.staticfiles.finders.AppDirectoriesFinder-インストールされた検索Djangoアプリケーションは 'static'フォルダを探しますが、それらのうち、現在は時代遅れの「メディア」フォルダを使用しています。
Django.contrib.staticfiles.finders.FileSystemFinder-STATICFILES_DIRSに記載されているすべてのディレクトリを使用しますが、STATIC_ROOTを追加することはできません。
Django.contrib.staticfiles.finders.DefaultStorageFinder-DEFAULT_FILE_STORAGE(Django.core.files)で静的検索します。 storage.FileSystemStorageデフォルトでは、MEDIA_ROOTを指します
それだけです。追加の選択肢はありません。現時点では、STATIC_ROOTを使用する選択肢はありません(Django 1.3))。
したがって、私はこれらのニーズに合わせて独自のカスタムFinderを作成しました。
私のカスタム静的Finderファイル:finders.py:
from Django.core.files.storage import FileSystemStorage
from Django.contrib.staticfiles.finders import BaseStorageFinder
from Django.conf import settings
class StaticFinder(BaseStorageFinder):
storage = FileSystemStorage(settings.STATIC_ROOT, settings.STATIC_URL)
settings.py:
STATICFILES_FINDERS = (
'finders.StaticFinder',
)
そして覚えておいてください:このソリューションは、開発のニーズにのみ使用し、本番環境では使用しないでください!
STATIC_ROOT = '/home/ws/be/bla/'
STATICFILES_DIRS = ('/home/ws/be/static/',)
STATIC_URL = '/static/'
これは私のために働く。 STATIC_ROOTはSTATICFILES_DIRSとは異なる必要があります(Djangoバージョン1.4プレアルファSVN-16436)
まず、urls.pyで static serve が有効になっていることを確認してください(開発のみ)。
また、そこに余分なスラッシュがあるかもしれません。 STATIC_URL == '/ static /'の場合、
{{STATIC_URL}}/css/style.cssは{{STATIC_URL}} css/style.cssでなければなりません。