2012-03-07 6 views
0

モデルには、同じhtml/js/cssを使用して常にレンダリングされているデータがあります。モデルを{% create_component mymodel %}にレンダリングする作業を簡略化するために、カスタムtemplatetagを思いつくように誘惑されています。しかし問題はcss/jsも含まれていて、ページの頭に自動的に追加されたいのですが(ページのどこかにはありません)djangoで再利用可能なhtml/css/jsコンポーネントを書くには?

これを行う方法はありますか?

ありがとうございました!

+0

なぜそれを分けて3つのtemplatetagsがありますか? 'create_html'、' create_css'、 'create_js'など? – bonsaiviking

+0

主にコードをきれいに保ち、ドライを守ること。 3つのタグのうち1つまたは2つを忘れた場合はどうすればよいですか?そのコンポーネントを表示する必要がない場合はどうなりますか? (私は 'if'を3回繰り返す必要があり、タイプミスしないことを願っています)。私は、純粋な解決策から生じる可能性のある痛みを避けることができるかどうかを確認しようとしています。 – Sandro

+0

私は決してカスタムのdjangoテンプレートタグを作ったことはありませんが、djangoテンプレートブロックをそれらの中に定義することができれば、あなたのベーステンプレートにcss、jsのブロックがあるならば、あなたはそれらのブロックをあなたが望むものに追加することができます。それで、あなたは '{%create_component mymodel css_block js_block%}'を実行して、その場でhtmlをレンダリングし、適切なCSSとjをそれぞれのブロックに追加します – miki725

答えて

0

キューを使用してlabjsのdjango templatetagを書きました。リソースのブロックを減らすことの利点に加えて、パフォーマンスやダブルコールを心配することなく、独自のjavascriptを含むコンポーネントを作成することも容易になりました。

javascriptファイルを2回ロードすると、2回目の呼び出しが無視され、django圧縮と組み合わせることで "バンドル"を作成できます。それはまだ完璧ではない、と私はheadjsを使用して、djangoアプリを書くと、HTMLとCSSを含む再利用可能なジャンゴコンポーネントを処理するためのより成熟した、または包括的なアプリケーションを作って探しています。

これはjsでは機能しますが、cssでは同様のことができます.CSSファイルを動的に読み込むjsライブラリです。

これをクライアント側で処理する利点は、遅延ロードのアンチブロッキングの利点が得られることです。

シンプルでシンプルなサーバー側を望むなら、探しているものはcss/jsレジストリです。 "登録された" jsとcssをすべて先頭に出力するミドルウェアを簡単に書くことができます。カスタムモデルのtemplatetagに登録しているcss/jを含めることができます。

これにはdjango-assetsを使用したり再利用したりすることができます。

関連する問題