web-dev-qa-db-ja.com

Djangoの静的STATIC_URLとSTATIC_ROOTの違い

static rootに混乱しており、物事を明確にしたい。

Djangoで静的ファイルを提供するには、settings.pyおよびurls.pyに次のものが必要です。

import os
PROJECT_DIR=os.path.dirname(__file__)

1.静的ファイルを収集するディレクトリへの絶対パス

STATIC_ROOT= os.path.join(PROJECT_DIR,'static_media/')

2.静的ファイルのURLプレフィックス

STATIC_URL = '/static/'

3.静的ファイルの追加の場所

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}
))

4. python manage.py collectstaticも使用します

質問:

  1. 誰も私にワークフローを説明してもらえますか:物事が理想的にどのように行われるべきか。今のところ、上記のコードスニペットをコピーして指定の場所に貼り付け、静的ディレクトリに新しいファイルを作成し続けると機能します。しかし、私のsettings.STATIC_ROOTでは、別のディレクトリを指しています。

  2. 各設定のワークフロー(ファイルの収集方法と管理方法、従うべき優れた方法)を誰かが説明できれば素晴らしいと思います。

ありがとう。

105
user993563

STATIC_ROOT

./manage.py collectstaticが展開用の静的ファイルを収集するディレクトリへの絶対パス。 例:STATIC_ROOT="/var/www/example.com/static/"

コマンド./manage.py collectstaticは、すべての静的ファイル(つまり、アプリの静的フォルダー、すべてのパスの静的ファイル)をディレクトリ/var/www/example.com/static/にコピーします。これで、Apacheまたはnginx..etcでこのディレクトリを提供するだけで済みます。

STATIC_URL

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>
70
suhailvs

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 /'は通常は問題ありません。静的ファイルの単なるプレフィックスです。

28
keni

上記の答えはすべて役に立ちますが、私の問題を解決できるものはありません。実稼働ファイルでは、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 = Truehttp(s)://を使用できないことを示すエラーメッセージを吐き出したら、思慮深いでしょう。

STATIC_URLを「/ static /」に変更する必要がありました

0
MIkee