static root
に混乱しており、物事を明確にしたい。
Djangoで静的ファイルを提供するには、settings.py
およびurls.py
に次のものが必要です。
import os
PROJECT_DIR=os.path.dirname(__file__)
STATIC_ROOT= os.path.join(PROJECT_DIR,'static_media/')
STATIC_URL = '/static/'
STATICFILES_DIRS = ( os.path.join(PROJECT_DIR,'static/'),)
...およびurls.py
に次の行があります。
from Django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += patterns('', (
r'^static/(?P<path>.*)$',
'Django.views.static.serve',
{'document_root': settings.STATIC_ROOT}
))
python manage.py collectstatic
も使用します質問:
誰も私にワークフローを説明してもらえますか:物事が理想的にどのように行われるべきか。今のところ、上記のコードスニペットをコピーして指定の場所に貼り付け、静的ディレクトリに新しいファイルを作成し続けると機能します。しかし、私のsettings.STATIC_ROOT
では、別のディレクトリを指しています。
各設定のワークフロー(ファイルの収集方法と管理方法、従うべき優れた方法)を誰かが説明できれば素晴らしいと思います。
ありがとう。
./manage.py collectstatic
が展開用の静的ファイルを収集するディレクトリへの絶対パス。 例:STATIC_ROOT="/var/www/example.com/static/"
コマンド./manage.py collectstatic
は、すべての静的ファイル(つまり、アプリの静的フォルダー、すべてのパスの静的ファイル)をディレクトリ/var/www/example.com/static/
にコピーします。これで、Apacheまたはnginx..etcでこのディレクトリを提供するだけで済みます。
STATIC_ROOT
ディレクトリ内の静的ファイルが提供されるURL
(Apacheまたはnginx..etcによって)。 例:/static/
またはhttp://static.example.com/
STATIC_URL = 'http://static.example.com/'
を設定した場合、ApacheまたはnginxによってSTATIC_ROOT
フォルダー(つまり、"/var/www/example.com/static/"
)をurl 'http://static.example.com/'
(静的ファイル'/var/www/example.com/static/jquery.js'
with 'http://static.example.com/jquery.js'
)
Djangoテンプレートで、次の方法で参照できます。
{% load static %}
<script src="{% static "jquery.js" %}"></script>
レンダリングします:
<script src="http://static.example.com/jquery.js"></script>
STATICFILES_DIRS
:ここにプロジェクトの静的ファイルを保存できます。テンプレートで使用されるもの。
STATIC_ROOT
:これを空のままにします。manage.py collectstatic
を実行すると、システム上のすべての静的ファイルが検索され、ここに移動されます。静的ファイルサーバーは、その場所に関係なくこのフォルダーにマップされることになっています。 collectstaticを実行した後に確認すると、Djangoが構築したディレクトリ構造が見つかります。
--------編集----------------
@DarkCygnusが指摘したように、STATIC_ROOTはファイルシステム上のディレクトリを指している必要があります。Djangoによって設定されるため、フォルダは空になっている必要があります。
STATIC_ROOT = os.path.join(BASE_DIR、 'staticfiles'))
または
STATIC_ROOT = '/ opt/web/project/static_files
'
--------編集の終了-----------------
STATIC_URL
: '/ static /'は通常は問題ありません。静的ファイルの単なるプレフィックスです。
上記の答えはすべて役に立ちますが、私の問題を解決できるものはありません。実稼働ファイルでは、STATIC_URLはhttps://<URL>/static
であり、dev settings.pyファイルで同じSTATIC_URLを使用しました。
これにより、Django/conf/urls/static.pyでサイレントエラーが発生します。
テストElif not settings.DEBUG or '://' in prefix:
はURLの「//」を選択し、静的URLパターンを追加しないため、静的ファイルが見つかりません。
DjangoがDEBUG = True
でhttp(s)://
を使用できないことを示すエラーメッセージを吐き出したら、思慮深いでしょう。
STATIC_URLを「/ static /」に変更する必要がありました