2012-02-02 20 views
6

私は新しいDjangoプロジェクトを計画しており、すべてのものを正しく取得したいと考えています。私は、プロジェクトのディレクトリレイアウトをどのように整理するかの問題を見つけました。幸運にも、そこには良いプロジェクトテンプレートの例がかなりあります。それでも、私が頭の中で苦労しているのは、Djangoのテンプレートと静的ファイルの場所

です。アプリケーションによってサブディレクトリに分割されたプロジェクトルートの別のディレクトリにテンプレートファイルを置くことをお勧めします。したがって、テンプレートはアプリディレクトリ内に配置されません。私はアプリケーションロジックを表現ロジックから分離したいので、それは私には論理的です。しかし、静的ファイルはどうですか?ここでは、一般的なプラクティスは、静的ファイルをアプリケーションディレクトリ内に配置し、開発時にはプロジェクトルートの下にある '静的'ディレクトリ(collectstatic)にロードすることです。そして、私はこの論理を理解していません。静的ファイル(つまり、js、css、images)は通常、アプリケーションコード内ではなくテンプレート内でアクセスされるため、プレゼンテーションロジックにカウントします。それでは、テンプレートのように格納されていないのはなぜですか?プロジェクトルートの下のディレクトリで、単一のアプリケーションのサブディレクトリがありますか?

私はいつでもどこでもこれらのファイルを保存することができますが、人がこのようにしている理由があると思います。この理由は何でしょうか?

答えて

8

スタティックファイルは、特定のアプリケーションに関連するテンプレートがアプリケーションディレクトリに配置されるのと同じ方法で、関連するアプリケーションに配置できます。

時には意味があります。時々、それはあなたの呼び出しではありません。

たとえば、私はsite_mediaディレクトリ(グローバルCSS、グローバルイメージなど)に静的メディアを配置しますが、アプリケーション固有のメディアはapp/staticに配置します。たとえば、私がPollアプリを持っている場合、私のメディアは、私のサイトインデックスではなく、Pollアプリテンプレートのためだけに必要なことがあります。

テンプレートでも同じです:グローバルテンプレートディレクトリ(base.html)をグローバルテンプレートディレクトリに配置しますが、アプリケーション固有のテンプレートはmyapp/templates/myapp/foo.htmlになります。

最後に、プラグイン可能なアプリケーションに特に適しています。たとえば、djangoの静的ファイルはアプリケーションに格納されていますが、静的ファイルディレクトリにアクセスできるようになります(ただし、アプリケーションはPythonパスのどこかに存在します)。以前は、メディアディレクトリやシンボリックリンクをコピーする必要がありました。

すべてのファイルを1か所のアプリケーションフォルダ(アプリケーションフォルダ)に整理できるので、staticfilesアプリケーションが本当に輝きます。 collectstaticは残りの部分を処理し、Webサーバーのすべての場所で利用できるようにします。

+0

アプリのディレクトリ内のテンプレートと静的ファイルを整理することは、差し替え可能なアプリにとって意味があると思います。しかし、私はプラグイン可能なアプリケーションを作成する予定がない場合は利点はありませんが、そこにはありませんか?プロジェクトの新しいバージョンを導入するたびに、単に 'collectstatic'を呼び出すオーバーヘッドがあります。 – j0ker

+0

@ J0ker、それは議論の余地があり、完全にあなたの呼び出しです。時には、それは別々にパッケージ化されたアプリケーションの場合、私は自分自身が 'app/static'を使っていることがわかります。それ以外の場合は、コアウェブサイトに関連するすべてのアプリケーションのために、私は 'site_media'フォルダを使用します。とにかくそれを使用するファブリックスクリプトを使用するので、 "collectstatic"を呼び出すオーバーヘッドは私のために削除されます。 PLUS <静的ファイルストレージバックエンドを設定すると、amazon S3にcollectstaticアップロードすることができます。 –

5

私は実際に各アプリケーションのディレクトリにテンプレートを入れました。それは意味があると思います。 Pythonファイルでは他のことが起こっているので、まだ論理分離の分離があります。

しかし、テンプレートディレクトリをアプリに配置すると、アプリが他のプロジェクトに役立つことが判明した場合、そのアプリを新しいプロジェクトに直接コピーすることができます。また、ルートテンプレートフォルダに別のテンプレートを作成することで、これらのテンプレートをいつでもオーバーライドできます。

静的ディレクトリはでもはアプリディレクトリに保存する必要があります。特定のアプリケーションに必要なものに基づいてリソースを非常に明確に整理することができます。そのため、最初にstaticfilesアプリケーションが作成されました。

関連する問題