web-dev-qa-db-ja.com

Django静的ファイルの開発

これは、主題に関する同様のタイトルの量から判断すると、多くの混乱の原因のようですが、静的ファイルで見つけたすべてのものをDjango開発サーバーで試してみて、ほとんど希望を捨てました!!

したがって、静的ファイルはC:/ Users/Dan/seminarWebsite/static /から提供され、画像やcssなどのサブフォルダーがあります。

設定:

STATIC_ROOT = 'C:/Users/Dan/seminarWebsite/static/'  
STATIC_URL = '/static/'  

静的ファイルアプリもアクティブです。

RL:

from Django.contrib.staticfiles.urls import staticfiles_urlpatterns  
urlpatterns += staticfiles_urlpatterns()

テンプレート:

"{{ STATIC_URL }}images/vision.jpeg"

ただし、壊れたリンクのみが表示され、次のアドレスに表示されます:http://127.0.0.1:8000/homepage/images/vision.jpegそして私はそれがそのアドレスにあるべきではないと思います(ホームページは静止画像ファイルが呼び出されているページのURL名です)。

22
dannymilsom

これまでに投稿した内容に基づくと、 Django.contrib.staticfiles のドキュメントをフォローしているようです。特にDjangoを初めて使用する場合は、 docs をフォローするのが難しい場合があることに同意します。

混乱は、Django.contrib.staticfiles2つのモードの操作があるという事実から生じていると思います。

  1. 開発サーバー が使用される開発フェーズでは、事前定義されたディレクトリ内の静的ファイルを動的に検索し、STATIC_URLで使用できるようにします。
  2. 展開の場合、静的ファイルを単一のディレクトリ(STATIC_ROOTを使用して定義)に照合するのに役立ち、静的ファイルに適したWebサーバーを使用して静的ファイルをホストできます。この照合は、python ./manage.py collectstaticを使用して行われます。

これは、立ち上げて実行する方法の簡単な要約です。試してみる機会がなかったので、間違いがあるかもしれません。うまくいけば、これはあなたが始めるのを助け、少なくともあなたがドキュメントを理解するのを助けるでしょう。疑問がある場合は、ドキュメントを参照してください。

開発サーバーで静的ファイルをホストする

  1. 'Django.contrib.staticfiles'INSTALLED_APPSがあることを確認してください

  2. STATIC_URL を指定します。これは、静的ファイルがホストされるパスになります。

    STATIC_URL = '/static/'
    
  3. ファイルが正しいディレクトリにあることを確認してください。デフォルトでは、staticfilesは、インストールされている各アプリのstatic/ディレクトリ内、および STATICFILES_DIRS で定義されているディレクトリ内のファイルを検索します。 (この動作は、 STATICFILES_FINDERS にリストされているバックエンドによって異なります)。あなたの場合、あなたはおそらくあなたのディレクトリをSTATICFILES_DIRSで指定したいと思うでしょう:

    STATICFILES_DIRS = ( 
          'C:/Users/Dan/seminarWebsite/static/',  
    )
    
  4. urls.pyendに以下を追加して、ビューにアクセスできるようにします。

    from Django.contrib.staticfiles.urls import staticfiles_urlpatterns
    urlpatterns += staticfiles_urlpatterns()
    
  5. DEBUG = Truesettings.pyがあることを確認してください。

それでおしまい。

開発サーバー(./manage.py runserver)を実行している場合は、http://localhost:8000/static/images/vision.jpegC:/Users/Dan/seminarWebsite/static/images/vision/jpegを提供)を介してファイルにアクセスできるはずです。

テンプレート内の静的ファイルへのリンク

静的ファイルの正しいリンクを取得するには、2つの方法があります。 staticfilesテンプレートタグ を使用する方法と、テンプレートからSTATIC_URLにアクセスできるようにする方法です。あなたは後者を試みたので、私たちはそれに固執します。

  1. 'Django.core.context_processors.static'TEMPLATE_CONTEXT_PROCESSORSがあることを確認してください。 TEMPLATE_CONTEXT_PROCESSORSを再定義していない場合は、何もする必要はありませんデフォルトで存在するはずです

  2. テンプレートをレンダリングするときは、必ず RequestContext を使用してください。例:

    from Django.template import RequestContext
    # ...
    
    def some_view(request):
        # ...
        return render_to_response('my_template.html', {
            "foo" : "bar",  # other context 
        }, context_instance = RequestContext(request))
    

これで、my_template.htmlで以下を使用できるようになります。

<a href="{{ STATIC_URL }}images/vision.jpeg" />

本番サーバーで静的ファイルをホストします。

提供する必要のあるすべての静的ファイルがその1つのディレクトリ(C:/Users/Dan/seminarWebsite/static)に格納されている場合は、ほぼそこにあります。 /static/(またはSTATIC_URLに設定したもの)でそのディレクトリをホストするようにWebサーバーを設定するだけで、準備は完了です。

ファイルが異なるディレクトリやアプリ固有の静的ファイルに散在している場合は、それらを照合する必要があります。

  1. STATIC_ROOT を、照合されたファイルを保存するディレクトリに設定します。

  2. ./manage.py collectstatic を実行して照合を行います。

  3. STATIC_ROOT(または/static/に設定したもの)でそのディレクトリ(STATIC_URL)をホストするようにWebサーバーを構成します。

75
Shawn Chin