2012-01-04 48 views
2

我想作一個形式用這種網格:顯示Django的形式或者Django的Floppyforms網格無線電形式

Grid questions

你知不知道我該怎麼辦呢?有沒有一個Django窗體小部件?

實際上它是與網格中的無線電顯示相同的選擇列表的問題。

感謝,

Natim

+1

在這種情況下,我會毫不猶豫地使用純html,並且只需{%if form.data.email =='daily'%} checked = checked {%endif%} in radio input tags。 KISS一路。 – jpic 2012-01-04 13:49:37

+1

所以你會製作一個包含標題(選項)和字段作爲參數的模板標籤? – Natim 2012-01-04 13:53:51

+0

對於第一個網格,我會在表單模板中硬編碼。對於第二個網格:包含模板標籤聽起來像是個好主意(爲什麼不使用django-native-tags)。至於參數,有一點是肯定的:您需要選擇區域(構建行),但是您可以從字段(field.choices)推導出選擇(構建列)。所以看起來這樣的簽名可以工作{%my_inc_tag form'email,newsletter等...'%}。當然,包含函數將不得不準備包含模板所需的上下文。這不是直接的,但它是可能的。 – jpic 2012-01-04 14:06:01

回答

4

我會做到這一點用在網格上每行一個字段Django的形式,具有ChoiceField和RadioSelect小窗口:

line1 = forms.ChoiceField(widget=forms.RadioSelect, choices=TRUC) 
line2 = … 

然後你需要找到模板佈局來正確渲染。 RadioSelect生成<ul>,其中eahc選項爲<li>。選擇標籤包含在<li>中,這不是您想要的。

使用軟盤可以繼承RadioSelect並給它一個cutom template_name(查看floppyforms/radio.html模板)以省略標籤。你也可以修改它來渲染表格單元格(<td> s)而不是<li>,並使表單標記生成一個表格標題中的標籤。

import floppyforms as forms 

class RadioSelect(forms.RadioSelect): 
    template_name = 'myforms/radio.html' 

把你想要的行標記放在上面的模板中。

然後,在模板中呈現你的表格:

<form method="post" action="youraction"> 
    <table> 
    <thead> 
     <td> <!-- put your form headers here --> </td> 
    </thead> 
    <tbody> 
     {% for field in form %} 
     <tr> 
      <td>{{ field.label_tag }}</td> 
      {{ field }} 
     </tr> 
     {% endfor %} 
    </tbody> 
    </table> 
<!-- submit button --> 
</form> 

然後它只是將一對夫婦的CSS樣式來得到你需要:)