web-dev-qa-db-ja.com

Django-静的ファイルが見つかりません

この問題に関するいくつかの投稿を見ましたが、解決策が見つかりませんでした。

Django 1.3開発環境で静的ファイルを提供しようとしています。

ここに私の設定があります

...
STATIC_ROOT = '/home/glide/Documents/Django/cbox/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
  '/static/',
)
...

私のurls.py

urlpatterns = patterns('',
...
  url(r'^static/(?P<path>.*)$', 'Django.views.static.serve',
    {'document_root', settings.STATIC_ROOT}
  ),
...
);

私の/ home/glide/Documents/Django/cbox/static /ディレクトリは

css
  main.css
javascript
image

http://127.0.0.1:8000/static/css/main.cssにアクセスしようとすると404エラーが表示されます。

CSS、JavaScript、画像のパターンを個別に指定する必要がありますか?

58

私はSTATIC_ROOTSTATICFILES_DIRSを混同しました

実際、私はSTATIC_ROOTのユーティリティを本当に理解していませんでした。共通ファイルを配置する必要があるディレクトリだと思いました。このディレクトリは実稼働に使用されます。これは collectstatic によって静的ファイルが置かれる(収集される)ディレクトリです。

STATICFILES_DIRSが必要です。

私は開発環境にいるので、解決策はSTATIC_ROOTを使用せず(または別のパスを指定して)、共通ファイルディレクトリをSTATICFILES_DIRS

#STATIC_ROOT = (os.path.join(SITE_ROOT, 'static_files/'))
import os
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))
STATICFILES_DIRS = (
  os.path.join(SITE_ROOT, 'static/'),
)

また、from Django.conf import settings

84

静的ファイルの提供は、いくつかの方法で実現できます。自己への私のメモはここにあります:

  • static/my_app/ディレクトリをmy_appに追加します(以下のネームスペースに関する注意を参照してください)
  • 新しい最上位ディレクトリを定義し、それをsettings.pyのSTATICFILES_DIRSに追加します(The STATICFILES_DIRS setting should not contain the STATIC_ROOT settingに注意してください)

私は最初の方法、および方法に近いセットアップを好みます ドキュメントで定義されています 、したがって、ファイルadmin-custom.cssを提供していくつかの管理スタイルをオーバーライドするには、セットアップがありますそのようです:

.
├── my_app/
│   ├── static/
│   │   └── my_app/
│   │       └── admin-custom.css
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── static/
├── templates/
│   └── admin/
│       └── base.html
└── manage.py
# settings.py
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'

これは、テンプレートで次のように使用されます。

# /templates/admin/base.html
{% extends "admin/base.html" %}
{% load static %}

{% block extrahead %}
    <link rel="stylesheet" href="{% static "my_app/admin-custom.css" %}">
{% endblock %}

開発中にDjango.contrib.staticfiles [ed:デフォルトでインストール]を使用すると、DEBUGがTrueに設定されている場合、runserverによってこれが自動的に行われます[...]

https://docs.djangoproject.com/en/1.10/howto/static-files/

デプロイするとき、collectstaticを実行し、nginxで静的ファイルを提供します。


すべての混乱を解決したドキュメント:

STATIC_ROOT

Collectstaticがデプロイメントのために静的ファイルを収集するディレクトリへの絶対パス。

...not静的ファイルを永続的に保存する場所です。これは、静的ファイルのファインダによって検出されるディレクトリで行う必要があります。これは、デフォルトでは「static /」アプリのサブディレクトリと、STATICFILES_DIRSに含めるディレクトリです。

https://docs.djangoproject.com/en/1.10/ref/settings/#static-root


静的ファイルの名前空間

これで、静的ファイルを直接my_app/static /に置くことができます(別のmy_appサブディレクトリを作成するのではなく)が、実際には悪い考えです。 Djangoは、名前が一致する最初の静的ファイルを使用します。別のアプリケーションに同じ名前の静的ファイルがある場合、DjangoはDjangoを正しいものに向ける必要があります。これを保証する最も簡単な方法は、名前空間を使用することです。つまり、これらの静的ファイルを別のアプリケーション自体の名前が付けられたディレクトリ。

https://docs.djangoproject.com/en/1.10/howto/static-files/


STATICFILES_DIRS

プロジェクトにはおそらく、特定のアプリに関連付けられていない静的アセットも含まれます。アプリ内でstatic /ディレクトリを使用することに加えて、設定ファイルでディレクトリのリスト(STATICFILES_DIRS)を定義できます。ここでDjangoは静的ファイルも検索します。

https://docs.djangoproject.com/en/1.10/howto/static-files/

25
ptim

settings.pyファイルには、静的ファイルを提供するものが2つしかありません。

1)STATIC_URL = '/static/'

2)

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

静的ファイルは、プロジェクトの設定ファイルと同じディレクトリにある静的ディレクトリの下に配置する必要があります。

それでも静的ファイルがロードされていない場合、理由はです。

DEBUG = False

trueに変更します(開発専用)。本番環境では、STATICFILES_DIRSを静的ファイルが存在するパスに変更します。

14
Naren Yellavula

別のエラーは、アプリがINSTALLED_APPS次のようなリスト:

INSTALLED_APPS = [
    # ...
    'your_app',
]

使用しないと、静的ファイル、基本的にはアプリに関連するすべてのファイルが検出されないなどの問題に直面する可能性があります。以下を使用することにより、正解で提案されているように正しい場合でも:

STATICFILES_DIRS = (adding/path/of/your/app)

エラーの1つであり、このエラーが発生した場合は確認する必要があります。

2
Aklank Jain

静的URLは正しいが、それでも:

見つかりません:/static/css/main.css

おそらくあなたのWSGIの問題。

➡Config WSGIは開発環境と本番環境の両方に対応しています

==========================project/project/wsgi.py==========================

import os
from Django.conf import settings
from Django.contrib.staticfiles.handlers import StaticFilesHandler
from Django.core.wsgi import get_wsgi_application

os.environ.setdefault('Django_SETTINGS_MODULE', 'project.settings')
if settings.DEBUG:
    application = StaticFilesHandler(get_wsgi_application())
else:
    application = get_wsgi_application()
1
HoangYell

ローカル設定のDEBUG設定を移動して、デフォルトのFalse値で上書きされることがわかりました。 DEBUGおよびrunserverを使用して開発している場合、基本的にDEBUG設定が実際にfalseであることを確認してください。

0
Daniel Butler

{'document_root', settings.STATIC_ROOT}{'document_root': settings.STATIC_ROOT}である必要があります

または、dictionary update sequence element #0 has length 6; 2 is requiredのようなエラーが表示されます

0
Jens Timmerman