2010-06-07 55 views
4

我有一個這樣的形式:自定義呈現django形式的radioselect /訪問單個元素?

CHOICES = [ 
      ('a', 'a_value'), 
      ('b', 'b_value'), 
      ('c', 'c_value') 
] 

self.fields["choice"] = forms.ChoiceField( 
    widget=RadioSelect(), 
    choices=CHOICES, 
) 

如何我可以在模板中選擇此表單域的單個元素?我希望能夠做到這樣的事情:

<tr><td>{{form.choice.a}}</td><td>some custom extra field</td></tr> 

或者還有另一種方法來改變RadioSelect的呈現方式嗎?

回答

1

你不能通過參數或其他東西來做到這一點,它的呈現方式是在它的widget類中硬編碼的!見例如。 http://code.djangoproject.com/browser/django/trunk/django/forms/widgets.py:RadioSelect.render( - > RadioFieldRenderer.render);子類並覆蓋渲染方法,然後以myfield = forms.MultipleChoiceField(widget=MyWidget(...))的形式使用它。

+0

再多一次thing..is有沒有辦法將參數傳遞給我的子類的渲染?當我嘗試傳遞參數時,它說該對象不可調用。 – Oli 2010-06-08 09:14:43

+0

你想傳遞什麼? – 2010-06-08 10:07:21

1

我努力了幾個小時,試圖找到某種方式來使用RadioSelect上的自定義渲染器,但無法傳遞選擇編號。相反,我選擇了一個簡單的方法。在增加了一個__init__功能到我的表格:

def __init__(self, *args, **kwargs): 
    super(FormName, self).__init__(*args, **kwargs) 
    self.radiofield_choice = re.findall(r'<li>(.+?)</li>', 
             unicode(self['radiofield_name'])) 

使用該RadioSelect的默認渲染創建窗口小部件,然後分析出個人的選擇HTML。你甚至可以將它與定義的選項結合起來創建一個字典而不是一個列表。

在我的模板中,我使用{{ form.radiofield_choice.0|safe }}來渲染第一個項目。增加零以獲得其他項目。

如果由於某種原因,只有不包含標籤的輸入字段是必需的,請使用r'(<input.+/>)'