画像をレンダリングするテンプレートがあります。
{% load staticfiles %}
<img src="{% static "img/logo.png" %}" alt="My image"/>
画像のリンクが壊れていますが、次のことを示しています。
localhost/static/img/logo.png
この画像を正しく表示するには、static_root、static_url、およびSTATICFILES_DIRSに設定する必要のある値は何ですか?
これは私のディレクトリ構造です:
myprojectname(トップレベル)
--- myprojectname
--- --- myproectname
- - - - - - 設定
--- --- --- --- base.py(setting.py)
------静的
--- --- --- img
これは、設定での静的構成です。
STATIC_ROOT = '/Users/myuser/myprojectname/myprojectname'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
#normpath(join(SITE_ROOT, 'static')),
os.path.join(BASE_DIR, "static"),
'/Users/myuser/myprojectname/myprojectname/static',
)
これはそれが示すものです:
私はすでにcollectstaticを実行しましたが、これは機能しません。
静的ファイルはDjangoで混乱する可能性があります。できるだけ簡単に説明しようと思います...
_STATIC_ROOT
_これは、静的ファイルを提供するディレクトリですproduction。
_STATICFILES_DIRS
_これは、静的ファイルを提供するディレクトリですdevelopment。
STATIC_ROOTとSTATICFILES_DIRSは同じディレクトリを指すことはできません。
Djangoは高度にモジュール化されたフレームワークです。一部のアプリケーションモジュールには、独自のテンプレート、CSS、画像、JavaScriptが含まれています。 Djangoadminはそのようなアプリの1つです。 Djangoは、開発用と本番用の静的ファイルに異なるディレクトリを使用して作成するアプリケーションにこのモジュール性を拡張します。
_DEBUG = True
_で_Django.core.staticfiles
_を_INSTALLED_APPS
_に含めた場合、Djangoは_STATICFILES_DIRS
_タプルにあるファイルを_STATIC_URL
_を使用して提供します開始点としてのパス。
本番環境では、この責任はNginx、Apache、CloudFrontなどに与えられる必要があります。_DEBUG = False
_の場合、Djangoは静的ファイルを自動的に提供しません。
実行する場合:
_$ python manage.py collectstatic
_
STATICFILES_DIRSで指定されたファイルは、デプロイされるSTATIC_ROOTにコピーされます。
だから、あなたの質問に答えるために、私は次のことをします:
開発中の静的ファイルを保存するための別のディレクトリを作成し、そのパスをSTATICFILES_DIRSに追加します。私は通常、このフォルダーを「静的アセット」と呼びます。既存の「静的」ディレクトリと同じレベルに配置できます。
STATIC_ROOTを既存の「静的」ディレクトリへのパスに設定します。
スクリーンショットで404を返すパスをよく見ると、画像パスは/static/img/logo.pngとして指定されていますが、画像のディレクトリは/ static/image /です。
したがって、画像パスを再確認して、正しいディレクトリを指していることを確認してください。
Settings.pyが存在するプロジェクトのルートにフォルダ「staticfiles」を作成します
Staticfilesでは、この方法で実行できます。
Settings.py
STATIC_ROOT = os.path.join(PROJECT_DIR,'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(PROJECT_DIR,'staticfiles'), # if your static files folder is named "staticfiles"
)
TEMPLATE_DIRS = (
os.path.join(PROJECT_DIR,'template'), # if your static files folder is named "template"
)
Base.htmlで
<link rel="stylesheet" type="text/css" href="{% static 'css/demo.css' %}" />
<script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script>
Base.htmlを含む他のテンプレートファイル
{% extends "base.html" %}
{% load static %}
<script type="text/javascript" src="{% static 'js/jquery.min.js' %}"></script>
<div id="yourID" class="yourClass">
<img src="{% static "images/something.gif" %}" alt="something" >
</div>
開発モードの場合は、1行だけ定義します。
STATICFILES_DIRS = ( os.path.join('static'), )
STATIC_ROOT = '/ Users/myuser/myprojectname/myprojectname'を定義する必要はありません
[〜#〜]または[〜#〜]
STATICFILES_DIRS as BASE_DIR
したがって、作業ソリューションは次のとおりです。
STATIC_URL = '/static/'
STATICFILES_DIRS = ( os.path.join('static'), )