この問題に関するいくつかの投稿を見ましたが、解決策が見つかりませんでした。
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、画像のパターンを個別に指定する必要がありますか?
私はSTATIC_ROOTとSTATICFILES_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
静的ファイルの提供は、いくつかの方法で実現できます。自己への私のメモはここにあります:
static/my_app/
ディレクトリをmy_app
に追加します(以下のネームスペースに関する注意を参照してください)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によってこれが自動的に行われます[...]
デプロイするとき、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を正しいものに向ける必要があります。これを保証する最も簡単な方法は、名前空間を使用することです。つまり、これらの静的ファイルを別のアプリケーション自体の名前が付けられたディレクトリ。
STATICFILES_DIRS
プロジェクトにはおそらく、特定のアプリに関連付けられていない静的アセットも含まれます。アプリ内でstatic /ディレクトリを使用することに加えて、設定ファイルでディレクトリのリスト(STATICFILES_DIRS)を定義できます。ここでDjangoは静的ファイルも検索します。
settings.py
ファイルには、静的ファイルを提供するものが2つしかありません。
1)STATIC_URL = '/static/'
2)
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)
静的ファイルは、プロジェクトの設定ファイルと同じディレクトリにある静的ディレクトリの下に配置する必要があります。
それでも静的ファイルがロードされていない場合、理由はです。
DEBUG = False
trueに変更します(開発専用)。本番環境では、STATICFILES_DIRS
を静的ファイルが存在するパスに変更します。
別のエラーは、アプリがINSTALLED_APPS
次のようなリスト:
INSTALLED_APPS = [
# ...
'your_app',
]
使用しないと、静的ファイル、基本的にはアプリに関連するすべてのファイルが検出されないなどの問題に直面する可能性があります。以下を使用することにより、正解で提案されているように正しい場合でも:
STATICFILES_DIRS = (adding/path/of/your/app)
エラーの1つであり、このエラーが発生した場合は確認する必要があります。
静的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()
ローカル設定のDEBUG
設定を移動して、デフォルトのFalse
値で上書きされることがわかりました。 DEBUG
およびrunserver
を使用して開発している場合、基本的にDEBUG設定が実際にfalseであることを確認してください。
{'document_root', settings.STATIC_ROOT}
は{'document_root': settings.STATIC_ROOT}
である必要があります
または、dictionary update sequence element #0 has length 6; 2 is required
のようなエラーが表示されます