2009-08-16 9 views
3

私はテンプレートにcustom_fields変数を与えるビューでdjangoフォームをどのようにレンダリングしますか?

for field in FIELDS: 
    row = [] 
    row.append("<tr>") 
    row.append("<td>" + str(myform.fields.get(field)) + "</td>") 
    row.append("</tr>") 

    custom_fields.append("".join(row)) 
、私は取得していますすべてがある:

<tr><td><django.forms.widgets.CheckboxInput object at 0x1fa7d90></td></tr> 

がどのように適切にレンダリングされたフォームを得ることができますか?


これは私が最終的にやっているつもりです:

form1 = CustomForm1() 
form2 = CustomForm2() 
form3 = CustomForm3() 

for field in FIELDS: 
    row = [] 
    row.append("<tr>") 
    row.append("<td>" + str(form1.fields.get(field)) + "</td>") 
    row.append("<td>" + str(form2.fields.get(field)) + "</td>") 
    row.append("<td>" + str(form3.fields.get(field)) + "</td>") 
    row.append("</tr>") 

    custom_fields.append("".join(row)) 

だから、私は1つのテーブル内のすべてのフォームフィールドを一緒に表示することができます。

+4

なぜあなたのビューにHTMLを書き、それをテンプレートに渡していますか?テンプレート内のすべてのHTML生成を行う必要があります。 –

答えて

8

私はこれを考え出しました。それはとてもform.fieldsが全て結合していないフィールドのリストである、とform.__getitem__がバインドフィールドを返す呼び出し可能である代わりにform.fields[field]

>>> f = MyForm() 
>>> f 
<myform.forms.MyForm object at 0x1fa7810> 

>>> f['myfield'] 
<django.forms.forms.BoundField object at 0x20c7e50> 

>>> f.fields['myfield'] 
<django.forms.fields.BooleanField object at 0x1fa7850> 

form[field]です。

0

フィールドのリストを単独でテンプレートに渡していますか?テンプレートが正しくレンダリングするためには、フィールドはforms.Formから派生したオブジェクトの一部である必要があります。

myform.fields.get()への電話があると、にはフォームオブジェクトがあります。あなたはこのフィールドのリストで正確に何をしようとしていますか?

4

explained hereとして、フォームのインスタンスを使用すると、テンプレートで使用できるas_tableas_ulas_pのようないくつかの定義済みのレンダリング方法を持っています。

as_tableあなたのニーズをカットしているようですが、そうでない場合は、独自のフォームクラスにカスタムレンダリングメソッドを簡単に追加できます。この時点でdjango.forms.forms.BaseFormクラスを見てみることをお勧めします。

+3

+1。 Djangoはあなたのフォームをレンダリングするためのインタフェースを提供しています。 – anschauung

関連する問題