28

これは、このテーマの類似したタイトルの量から判断すると、多くの混乱の原因のようですが、静的ファイルで見つけたすべてのことをdjango開発サーバーで試してみました。

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

設定:

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

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

URL:

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名です)。

4

1 に答える 1

97

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

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

  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_DIRSSTATICFILES_FINDERSSTATICFILES_DIRS

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

    from django.contrib.staticfiles.urls import staticfiles_urlpatterns
    urlpatterns += staticfiles_urlpatterns()
    
  5. DEBUG = Trueにあることを確認してくださいsettings.py

それでおしまい。

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

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

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

  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そのディレクトリ( )をホストするようにWebサーバーを構成します/static/(または設定STATIC_URLしたもの)。

于 2012-02-07T18:26:49.673 に答える