2009-07-29 15 views
1

私はDjangoで書かれたCMSをカスタマイズしようとしています。コンテンツエディタは十分に柔軟ではないので、私はよりよい解決策を考え出しています。Djangoでテンプレートタグを書く

あまり説明しないと、django-better-chunksまたはdjango-flatblocksのようなビットになりたいと思います。編集可能な領域をテンプレート内から完全に設定します。これらの編集可能領域を文字列とオブジェクトインスタンスの組み合わせにバインドしたいと思います。一つの例では、1つの製品に基づいて複数の編集可能領域を持つことになります。

{% block product_instance "title" %} 
{% block product_instance "product description" %} 

あなたはproduct_instanceとして他の製品との見解を持っているのであれば、これら2 blocksが異なるデータを示すだろう。また、文字列部分だけを通過するサイト全体のブロックが使用されていることがわかります。本質的に、私は1-infinity識別子を渡すことができるようにしたいと考えています。

しかし、私は本当にここに2つの面で苦労しています:

  1. はどのようにして混合識別子と実際の内容「block」インスタンス間の関係を定義していますか?私はコンテンツタイプがここにあるかもしれないという気持ちがありますが、どこから探し始めたらいいのか分かりません!

  2. そして、上記の構文を読み、それをオブジェクトのレンダリングに変換するテンプレートタグを作成するにはどうすればよいですか?

+1

編集可能な領域は非モデルに関連付けられることがありますか?これは、保存されたデータをそのような文字列のデータベースに格納するための中間モデルを必要とします。私に教えてください。私が家に帰ると、私は一例を取り上げます。クールなアイデアのようなサウンド! – Cide

+0

理想的には、オブジェクトと文字列の組み合わせを投げることは理想です*しかし、私はそれが私のニーズに必要とは思わない。モデルインスタンスと文字列のみを使用します。 – Oli

+1

あなたの関連記事に例を挙げました。アプローチのサウンドが分かれば、私はこれにも対処する良い方法を考案しようとしています(両方とも関連しているのでどちらかの解決方法が他のものに依存しています) – Cide

答えて

2

このためにあなたが好き包含タグを作成し、それを使用することができます。

{% load my_tags %} 
{% product bicycle <extra vars ...> %} 

をタグを定義するには、あなたのアプリケーション/ templatetags/mytags.pyに追加します。

@register.inclusion_tag('results.html') 
def product(item, *extra): 
    #maybe repackage extra variables 
    #and add them to the returned dictionary 
    item_form = ItemForm(item) #form.ModelForm instance 
    return {'item': item, 'item_form':item_form, ...} 

次に、アイテムのhtmlを返すテンプレートが必要になります:

<h1>{{item.title}}</h1> 
{{item_form}} 
... add some conditional statements depending on extra vars 
関連する問題