Django静的ファイル処理【開発環境】


質問説明:Djangoには画像を埋め込む必要がありますが、相対パスで直接検索すると、画像を表示できません.【初期パス設定、画像をimagesフォルダの下に置く】
<img id="demo" src="/images/ori.gif"> 

解決策:公式文書:Managing static files(CSS,images)
djangoでcss,js,imagesファイルを処理する場合は,開発環境と生産環境の2つに分けられる.開発環境での実装手順について説明します.
多くの資料とブログを調べて、1つの方法はurlsです.pyにurlマッピングを設定し、CSS/JS/IMAGESのURLを対応する場所に移動します.
(r'^site_media/(?P<path>.*)$','django.views.static.serve',{'document_root':settings.STATIC_PATH}),

より簡潔な方法を提供し、djangoは関数インタフェースurlsを提供した.staticfiles_urlpatterns()は、静的ファイルを操作するのに便利です.以下に具体的な実現方法を紹介する:1.templates兄弟ディレクトリの下にstaticフォルダを作成し、images/js/cssファイルをstaticフォルダの下に配置します.
  • settings.pyまずINSTALLED_を確定APPSに『django.contrib.staticfiles’app.

  • STATIC_の設定URLとSTATICFILES_DIRS
    STATIC_URL = '/static/'
    
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR,'static'),
    )
  • urls.py staticfiles_のロードurlpatternsモジュール.
  • from django.contrib.staticfiles.urls import staticfiles_urlpatterns
    urlpatterns += staticfiles_urlpatterns()

    STATICFILES_の設定DIRSパス、staticfilesを使用urlpatterns関数は、パスの下で一致する静的ファイルを検索できます.4.templatesは設定されており、テンプレートの下でcss/js/imagesファイルにアクセスできます.
    <img id="demo" src="/static/images/ori.gif">

    この方法の設定では、js,css,imagesの3つの異なるパスを別々に設定する必要はありません.静的フォルダがある場所を設定すれば、テンプレートファイルでファイルのサブディレクトリを直接指定すればアクセスできます.また、http://localhost:8000/static/js/myjs.js静的フォルダのjsファイルにもアクセスできます.
    まとめ:djangoの中でphpの中のルートディレクトリの概念を望んでいないで、代わりにパッケージの概念で、urlsを通じて.pyは、各urlに対応するdjangoに対応する関数を提供してページを表示します.パッケージのtemplatesディレクトリのhtmlページでは、直接画像やcss、jsファイルの相対的、絶対的なパスを書くのではなく、urlsが提供するurlのように画像、js/cssディレクトリを書く必要があります.djangoは、静的ファイルを処理するための特殊なメカニズムを提供します.デフォルトでは(STATICFINES_FINDERSを変更していない場合)、djangoはまずSTATICFINES_DIRS構成のファイルから静的ファイルを探し、各appのstaticサブディレクトリから検索し、見つかった最初のファイルを返します.グローバルな静的ファイルをSTATICFILES_に置くことができますDIRS構成のディレクトリの下で、app固有の静的ファイルを各appのstaticサブディレクトリに配置します.次にカテゴリに従って保存し、画像はimagesファイルの下に、cssファイルはcssフォルダの下に、jsファイルはjsフォルダの下に置きます.
    STATIC_URLは、通常、デフォルトの/static/、指定された静的ディレクトリのURLを使用します.STATICFILES_DIRSは、プロジェクト内のどのディレクトリにこのプロジェクトに関連する静的ファイルが格納されているかを指定します.リストです.開発段階でDjangoは/staticをdjangoにマッピングする.contrib.staticfilesというアプリ.staticfilesが自動的にSTATICFILESからDIRS、STATIC_ROOTおよび各Appのstaticサブディレクトリで静的ファイルを検索します.
    生産環境参考:DjangoのMEDIA_ROOTとSTATIC_ROOT