0

ウィジェットで をレンダリング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">
...
4

1 に答える 1

2

私が見る最も簡単な方法:widgets.RadioSelectから継承されたカスタム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)

または、 aで呼び出しrenderてから asuper()に置き換えます。これは詳細です<ul><ul class=''>

于 2012-12-04T14:12:32.473 に答える