4

私はDjangoが初めてです。ドキュメンテーションを読みましたが、文字通り、メディア ルート ファイルと静的ルート ファイル、および JavaScript ファイルと一緒に css ファイルを配置する場所について混乱しています。

正しい方向に私を向けることができますか?プロジェクトのセットアップ:

Project
     -myapp
         -model,view,and test
     -template
         - base.html
         - index.html
         - view1
         - view2
         - media
             - css
                 - style.css
                 - ie.css
             - js
             - img

     -setting.py
     -url.py

私の static_url 、 static_root 、 media_url 、 media_root 、 STATICFILES_DIRS 、および STATICFILES_FINDERS はどのように見えるべきですか?

現在cssファイルをロードする方法は、base.htmlを介して次のとおりです。

{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static user_stylesheet %}"type="text/css" media="screen"/>

では、静的ファイルを管理するための最善かつ最も効率的/正しい方法は何ですか? 皆さん、助けてくれてありがとう。あなたの時間と労力に感謝します。

4

3 に答える 3

7

静的ファイルは単純なプロセスです。

  • Django は、静的ファイル用のstatic/アプリ内で名前が付けられたディレクトリを検索します。INSTALLED_APPSどのアプリにも関連付けられていないファイルがある場合は、それらを別のディレクトリに配置できます。STATICFILES_DIRSdjango が認識できるように、このディレクトリを (タプル) に追加する必要があります。あなたの場合、あなたは持っているべきですSTATICFILES_DIRS = ('/home/user/Project/template/media',)

  • django.contrib.staticfilesあなたに追加INSTALLED_APPS

でこれをテストしている場合はrunserver、 を開いて先頭にurls.py追加from django.contrib.staticfiles.urls import staticfiles_urlpatternsし、すべての URL を定義したら、ファイルの最後に追加します。urlpatterns += staticfiles_urlpatterns()

質問には、静的ファイルにアクセスする正しい方法が既にあります。もう 1 つの方法は、 を使用して{{ STATIC_URL }}、必ず で応答を送信することですRequestContext。クラス ベースのビューを使用している場合は、何も変更する必要はありません。他の通常の表示方法については、renderショートカットを使用してください。


STATIC_URLSTATIC_ROOT展開するときに便利です。

  • STATIC_URL静的ファイルがあるシステム内の場所を指すように Web サーバーが構成されている URL プレフィックスです。これはurl コンポーネントあり、スラッシュで終わる必要があります。例えば/static/

  • STATIC_ROOTこれは、システム上のディレクトリへのパスです。デプロイの準備ができたら、collectstaticコマンドを実行すると、django がすべての静的ファイルを見つけて、 が指すディレクトリにダンプしますSTATIC_ROOT。次に、このディレクトリを取得しDOCUMENT_ROOTて、Web サーバーが構成されているフォルダーに配置します。次に、/static/このフォルダーへの URL をポイントします。例はSTATIC_ROOT = /home/user/project/www/

Apache が で構成されていて、DOCUMENT_ROOT設定が;の場合。を実行した後、フォルダの内容を に移動します。/var/www/STATIC_URL/static/collectstatic/home/user/project/www//var/www/static/


  • STATICFILES_FINDERS. この設定には、実行時に django が静的ファイルを検索するために使用できるメソッドがリストされてcollectstaticおり、通常はこれをまったく変更しません。

  • MEDIA_ROOTMEDIA_URL。これらの設定は、ファイル システムの場所、およびdjango を使用してアップロードされるファイルの URL プレフィックスを制御します。と同じにすることはできませSTATICFILES_DIRSん。collectstaticこれらの場所には触れないため、これを手動で処理する必要があります。開発中にファイルのアップロードをテストしている場合は、 を使用django.views.static.serve()して からファイルを提供できますMEDIA*
于 2012-10-24T05:09:18.697 に答える
1

すべての js ファイルと css ファイルを「static」という名前のフォルダーに保管し、アプリケーション フォルダーの外側に保管することをお勧めします (これが django の推奨方法です)。たとえば、/var/www/static/ の下に保管すると、この場合、属性は次のようになります: STATIC_DIR = "/var/www/static/" STATIC_URL = "/static/" (何でもかまいません) )

テンプレートでは、テンプレート タグ {{STATIC_URL}} を使用して静的フォルダーを参照し、残りのパスを静的フォルダーからファイルに追加できます。{{STATIC_URL}} テンプレート タグを使用するには、ビュー コードから context_instance を渡す必要があることに注意してください。

于 2012-10-24T04:46:31.767 に答える
1

メディア提供は Django は「もの」です。

ここでドキュメントへのリンクを確認できます: https://docs.djangoproject.com/en/dev/howto/static-files/

しかし、魔法のビットは次のとおりです ** これが生産されていない場合 ** おそらく、以下を の下部に追加する必要がありますurls.py

from django.conf import settings

# ... the rest of your URLconf goes here ...

if settings.DEBUG:
    urlpatterns += patterns('',
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
            'document_root': settings.MEDIA_ROOT,
        }),
   )

運用サーバーの場合、Web サーバー (Apache など) によってメディアのオールドスクール スタイルを提供します。同じドメインを使用しますが、Django/Python サイトとは効果的に完全に独立しています。

于 2012-10-24T04:47:35.210 に答える