2

Django で関連ファイルをまとめておく最良の方法は何ですか?

HTML テンプレートに加えて、ほとんどのビューには、少なくとも 1 つの追加の JavaScript ファイルと、場合によっては追加の CSS ファイルがあります。例えば:

  • item_detail.html
  • item_detail.js
  • item_detail.css

可能であれば、これらのファイルを並べて保持したいので、それらを見つけるために 2 つまたは 3 つのディレクトリを調べる必要はありません。

更新:キャッシュを無効にするのはばかげていることはわかっていますが、それは私が求めていることではありません。各ページは、適切にキャッシュされた複数の JavaScript および CSS アイテムをロードします。例えば:

<!-- at top of file -->
<link rel="stylesheet" href="/master/css/site-main.css">

<!-- at bottom of file -->
<script type="text/javascript" src="/master/js/jquery.js"></script>
<script type="text/javascript" src="/master/js/site-main.js"></script>

その部分は問題ありません。

これに加えて、各ページはページ固有のJavaScript と CSS をロードします。

<link rel="stylesheet" href="/static/css/widgets/item_detail.css">
<script type="text/javascript" src="/static/js/widgets/item_detail.js"></script>

この例でitem_detail.jsは、アイテムの詳細ページ (のみ) で必要なイベント ハンドラーがあります。

残念ながら、これは、このビューに複数の並列ディレクトリ構造があることを意味します。

  • my_site
    • widgets
      • item_detail.htmlこれが景色
    • static
      • css
        • item_detail.cssこれはビュー固有の CSS です
      • js
        • item_detail.jsこれはビュー固有の JavaScript です

私が欲しいのはこれです:

  • my_site
    • widgets
      • item_detail.htmlこれが景色
      • item_detail.cssこれはビュー固有の CSS です
      • item_detail.jsこれはビュー固有の JavaScript です

ビューが Django で機能する方法のため、これが可能かどうかはわかりません。

4

5 に答える 5

1

開発用のものを整理しているだけの場合は、すべてのテンプレート、css、および js ファイルを含むテンプレート dir を、静的ファイルを提供しているディレクトリにシンボリック リンクすることができます。

あなたの例から: my_site/widgets を Django TEMPLATE_DIRS config に追加し、 cp -s my_site/widgets を静的ファイルがあるディレクトリに追加します。

これは汚いハックです。非常に安全でないため、本番環境では使用しないでください。しかし、開発段階でプロジェクトをきちんと整理したい場合は、これが可能な解決策の 1 つだと思います。

また、開発から本番に移行するときに、何かが失敗するため、これが頭痛の種になる可能性があることも考慮してください。

于 2009-08-17T17:42:50.440 に答える
0

私はjavascriptを関数で区切られたファイルに保持し、それらをpre-commitフック(テスト実行直後)を使用して単一の縮小されたjsファイルに結合します。

例:現在作業しているサイトにいくつかのjquery-uiダイアログがあります。各ダイアログの機能は、保守性のために独自のjsファイルに分割されています。そして、必要なすべてのjsファイルは、次のような短いbase.jsファイルを使用して開発ページに「含まれ」ます。

function include(filename) {
    document.write(unescape("%3Cscript src='" + filename + "' type='text/javascript'%3E%3C/script%3E"));
}

// include-js (external)
include('/site_media/jquery-plugin1.js');
include('/site_media/js-sources/dialog1.js');

私のpre-commitフックは、このファイルに対して正規表現を実行します...

include\('/site_media/(.*)'\);

すべてのファイルをYUIコンプレッサーにフィードします。

だから私はあなたの質問への答えは...私は論理的に意味のあるところならどこにでもそれらを置きます、なぜならライブサイトでは、とにかくそれはすべて縮小されたJSファイルにあるからです

于 2009-08-17T17:28:35.120 に答える
0

私はフレクセネットに同意します。彼が取り組んでいる問題の解決策は、さまざまな css ファイルと js ファイルを集約することかもしれません。サイト全体で 1 つの css ファイルと 1 つの js ファイルのみを使用します。はい、最初の負荷は高くなりますが、サイトの速度の大部分はファイルのダウンロードにあり、キャッシュが適切に行われている場合、これらのファイルの集約は私見に役立ちます.

残念ながら、あなたの主な質問に対する答えはありません。

于 2009-08-17T17:22:00.000 に答える
0

テンプレートを静的ファイルとして利用できるようにしたくありません。機密情報やページの実装に関する詳細が含まれている可能性があり、一般に公開するのは適切ではありません。

CSS と JS を別々のディレクトリに分離する必要はありませんstatic/。ディレクトリに配置するだけです。

  • my_site/
    • widgets/
      • item_detail.html
    • static/
      • item_detail.css
      • item_detail.js
于 2009-08-17T17:50:21.503 に答える
0

私がテストしている1つのアプローチ:

  • my_site/
    • widgets/
      • item_detail.html
      • item_detail.css
      • item_detail.js

これらは静的に共有されません。代わりに、HTML テンプレートで:

<script type="text/javascript" charset="utf-8">
    {% include "widgets/item_detail.js" %}    
</script>

(CSS の同様のコード。) これは、ページ固有のJavaScript と CSS に対してのみ行います。キャッシュの恩恵を受けるサイト全体のものではありません。

これにより、実際の JavaScript や CSS がテンプレートに直接ダンプされますが、開発目的でそれらを別のファイルに保持することができます。これは開発に関しては良いことですが、JavaScript と CSS のキャッシングの一部を無効にしますが、他のページで再利用されないページ レベルのものに限られます。

于 2009-08-17T18:05:24.857 に答える