8

Django 内の静的ファイル アプリを使用して静的コンテンツを提供できないことについて、他のかなりの数のスレッドを確認しましたが、まだ解決策を見つけていません。

設定.py

STATIC_ROOT = '/opt/django/webtools/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    "/home/html/static",
)
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

テンプレート

関連する行....

<img src="{{ STATIC_URL }}macmonster/img/macmonster-logo-blue.png" >

ログ

ログから、パスは正しいように見えますが、残念ながら、それでも 404..

[10/Feb/2013 16:19:50] "GET /static/macmonster/img/macmonster-logo-blue.png HTTP/1.1" 404 1817
[10/Feb/2013 16:19:51] "GET /static/macmonster/img/macmonster-logo-blue.png HTTP/1.1" 404 1817
4

2 に答える 2

14

静的ファイルをローカルで提供する場合、静的ファイルを収集する形式を設定していない場合、および Django 1.3+ を実行しているsettings.py場合、静的ファイルを参照するときにこれがどのように見えるかを信じています。

# Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps' "static/" subdirectories and in STATICFILES_DIRS.
# Example: "/home/media/media.lawrence.com/static/"
STATIC_ROOT = ''

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
 '/Users/cupcake/Documents/Workspaces/myDjangoProject/someOtherFolderPerhapsIfYouWant/static',
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

ここを省略していることに注意してSTATIC_ROOTください。これは、「まだ」静的ファイル コレクションの必要がないためです。

静的ファイルの収集は、複数の異なる staticfiles フォルダーを提供する際の問題を緩和 (スペル) することであるためstaticfiles、この問題を支援するために通常使用されていたアプリをマージしました。ドキュメントで説明されているように、これが行うことは、すべてのアプリからすべての静的ファイルを取得し、それらを 1 つのフォルダーに配置して、アプリを運用環境に置くときに簡単に提供できるようにすることです。

問題は、このステップを「見逃した」ことです。そのため、それらにアクセスしようとすると 404 が発生します。 したがって、静的ファイルへの絶対パスを使用する必要があります。Mac または UNIX システムでは、次のようになります。

'/Users/cupcake/Documents/Workspaces/myDjangoProject/someOtherFolderPerhapsIfYouWant/static',

また、私が説明に使用したようなハードコードされたパスを持つ必要性を単純化して「修正」し、このようにすることもできます

PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))

STATICFILES_DIRS = (
    PROJECT_ROOT + '/static/'
)

これにより、移植性の問題も解決されます。それに関する優れた Stackoverflow の投稿がここにあります

もう少しわかりやすくできたらと思いますが、間違っていたら訂正してください ^_^!

新しいバージョンの Django で静的ファイルを収集および管理する方法については、このリンクを参照してください 。 staticfiles アプリ

于 2013-02-10T17:29:39.437 に答える
3

変化する

STATIC_URL = '/static/'

設定

STATIC_URL = 'http://yourdomain.com/static/'

信じられないことですが、1時間検索した後、解決策は静的ファイルに関する問題を解決し、から削除STATIC_ROOTSTATICFILES_DIRSます。 STATICFILES_DIRSモジュール内のすべての静的を収集してに保存するだけですSTATIC_ROOT

于 2013-10-31T07:03:52.147 に答える