我正在使用TypedChoiceField
窗口小部件呈现RadioSelect
。为窗口小部件设置attrs={'class':'radio'}
,此类将应用于<input>
,但此输入嵌套在<ul>
中。我想为这个<ul>
设置一个类,我应该在哪里这样做?
我目前仍然使用Django 1.3,因此RadioSelect
不是一个选项。
从我的表格:
yesno = forms.TypedChoiceField(
coerce=lambda x: True if x == 'Yes' else False,
choices=((False, 'No'), (True, 'Yes')),
widget=forms.RadioSelect)
实际的HTML:
<ul>
<li>
<label for="yesno_0">
<input value="False" type="radio" name="yesno" id="yesno_0">
No
</label>
</li>
<li>
<label for="yesno_1">
<input name="yesno" value="True" id="yesno_1" type="radio">
Yes
</label>
</li>
</ul>
我想要的是什么:
<ul class='myclass'>
<li>
<label for="yesno_0">
...
答案 0 :(得分:2)
我看到的最简单的方式: 您可以创建一个自定义的RadioSelect小部件,继承自widgets.RadioSelect并覆盖“renderer”属性并将其设置为您的自定义RadioFieldRenderer(也继承自widgets.RadioFieldRenderer)并覆盖“render”方法
class CustomRadioFieldRenderer(widgets.RadioFieldRenderer):
def render(self):
return mark_safe(u'<ul class="YOUR-CLASS-HERE">\n%s\n</ul>' % u'\n'.join([u'<li>%s</li>'
% force_unicode(w) for w in self]))
class CustomRadioSelect(widgets.RadioSelect):
renderer = CustomRadioFieldRenderer
yesno = forms.TypedChoiceField(widget=CustomRadioSelect, *args, **kwargs)
或者使用render
致电super()
,然后将<ul>
替换为<ul class=''>
,这是一个细节