0

我正在渲染一个TypedChoiceField带有RadioSelect小部件的 , 。小部件的设置attrs={'class':'radio'},此类应用于<input>,但此输入嵌套在 中<ul>。我想为此设置一个类,<ul>我应该在哪里设置?

我目前仍在使用 Django 1.3,所以 aRadioSelect不是一个选项。

从我的表格:

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">
...
4

1 回答 1

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用 a调用,super()然后<ul>用 a替换<ul class=''>,这是一个细节

于 2012-12-04T14:12:32.473 回答