2010-12-16 4 views
1

これを達成するための最良の方法を見つけようとしています。私はかなりうまくいったDjangoプロジェクトを作りました。意見:このコードをdjango appに入れる場所:

ユーザーがページ(ページとモジュールはこのアプリのモデルです)に管理者として残しておくことができる多数の事前コーディングされたモジュールがあります(サイドリンク、広告、常時連絡先)。

新しい要件では、内部リンクのモジュールを同じウェルに挿入する必要があります。これらのリンクは、他のモジュールと同じ方法でページに関連付けられているわけではありません。それらは別々の多対多結合です。つまり、すべてのページにわたって1つのリンクを再利用できます。

テンプレート擬似コードは次のとおり

if page has modules: 
loop through modules: 
    write the pre coded content of module 

リンクモジュールと同一ウェル内にする必要があるため、私はリンクのプレースホルダのスラグと「リンクプレースホルダモジュール」を作成しています。

新しい擬似コードは次のとおりです。リンクについては、この出力を書き込むのに最適な場所がどこにあるか

if page has modules: 
loop through modules: 
    if module.slug is "link-placeholder": 
    loop through page.links and output each 
    else: 
    write pre-coded module 

私の質問はありますか?私はそれを見ると、私のオプションは以下のとおりです。

  1. は(簡単ですが、種類の乱雑取得 - コードは素晴らしく、端正である)テンプレートに入れての構築
  2. あるページモデルで機能を構築します「リンクのプレースホルダが検出された場合page.get_internal_link_ouutputが。基本的に、これは内部リンクモジュールの出力を作成し、印刷し、照会う)と呼ばれる。
  3. カスタムテンプレートタグで同じことを行います。

私は2に傾いていますまたは3、それはそれを行うには適切な場所のようには思われません。私はフレームワークが本当に好きですが、ちょっとdjangoアプリにコードを入れるのに最適な場所については混乱しています。

アドバイスを事前にいただきありがとうございます。

答えて

2

カスタムテンプレートタグを使用することをおすすめします。

コードを直接テンプレートに書き込むことは、その多くのロジックにとって適切な場所ではなく、モデルにテンプレート固有のメソッドを追加する必要はありません。テンプレート固有のクラスと関数(テンプレートタグなど)にテンプレート固有のロジックを追加する方がよい。

関連する問題