2011-09-29 23 views
2

Django 1.xで静的ファイルに取り組む方法についてたくさんのアドバイスがあります。これを行うためのベストプラクティスの方法はありますか?現在、Djangoで静的ファイルを提供するベストプラクティスは

+3

Django 2.xはありますか? – DrTyrsa

+0

いいえ、それはあなたが意味するものであればリリースを持っていません...質問は実際にはある意味が変わったように変更されました。フィードバックをお寄せいただきありがとうございます。 – SMTF

答えて

7

Djangoで静的ファイルを提供するアプローチがあるかもしれませんが、Django 1.3は新しいオプションを導入しました。基本的には、静的メディアを含むプロジェクトレベルまたはアプリレベルで特定のディレクトリを定義することができます。次に、管理コマンド 'collectstatic'を使用して、プロジェクトディレクトリ内のすべての静的ファイルを、Webサーバーによって提供される別のディレクトリ(おそらくプロジェクトの外部)にコピーできます。これは、以前のアプローチの多くの複雑さを解決します。

1)サードパーティ製のアプリケーションでは、静的なファイルを標準的な方法で簡単に組み込むことができます。あなたのwebserverディレクトリから個別のpython/djangoモジュール内の場所にシンボリックリンクを作成する必要はありません。

2)ウェブサーバーが静的ファイルをホストできる場所をより詳細に制御できます。たとえば、プロジェクト内のすべての静的メディアをバージョン管理下で定義することはできますが、ファイルシステム上の任意の場所にコピーすることができます。これにより、Webサーバーをプロジェクト内の場所に向ける必要がなくなります。

3)は、ユーザーがFileFieldのようなものを使ってアップロードした静的メディアから決して変化しない静的メディアを分割します。これは、あなたのdevサーバにインストールするバージョンコントロールにサイトレベルの静的メディアを保持したいと思う可能性が高いためです。しかし、ユーザが投稿したコンテンツは別のディレクトリにアップロードされます(1.3より前のバージョンのdjangoと異なります)。

私はこの機能がコアにマージされたサードパーティのモジュールであったと思います。ここで

はドキュメントです: https://docs.djangoproject.com/en/dev/howto/static-files/

は、基本的にはいくつかの新しいsettings.pyの変数があります。

STATIC_ROOT - これはあなたのウェブサーバによって提供されるファイルシステム上のディレクトリです。 ./manage.py collectstaticを実行すると、プロジェクト内のすべての静的ファイルとそのア​​プリケーションがここで指定したディレクトリにコピーされます。

STATIC_URL - これは、あなたのコンテンツのベースとなるURLを表すために設定するURLです。この値を "/ static /"に設定すると、含まれている静的メディアのすべてのURLの前に "/ static /"が付加されます。この変数はテンプレートでも使用します。たとえば、あなたのテンプレートで、あなたのような何かを指定することができます:静的ファイルがコピーされ

 
    <img src="{{ STATIC_URL }}logo.png"> 

STATIC_ROOT設定変数を指定していますが、静的ファイルをからコピーされどこの場所を提供する必要があります。これは、個々のDjangoアプリに "static //"という名前のディレクトリを作成することで行うことができます。これは、アプリ内のテンプレートの場合と同様です。 collectstaticコマンドを実行すると、Djangoはあなたのすべてのアプリケーションのすべての "静的/"ディレクトリからすべての静的ファイルをSTATIC_ROOTディレクトリにコピーします。 STATICFILES_DIRS設定変数を使用して、静的メディアをコピーするプロジェクトレベルのディレクトリを定義することもできます。

スタティックメディアを提供する方法はたくさんありますが、これはDjangoがサードパーティのモジュールをよりよく統合するのに役立つ素敵なAPIです。この機能が現在コアに含まれているという事実は、このアプローチがいくつかの勢いを増した可能性があるという示唆を与えるかもしれません。

希望します。 Joe

関連する問題