在Django 1.11中渲染没有UL的单选按钮

时间:2017-08-17 04:30:14

标签: django

我需要渲染没有UL的单选按钮组。在Django 1.9中,我使用this answer,我在很多地方使用它。我升级到Django 1.11,RadioFieldRendererno longer supported。我怎样才能完成我现在在Django 1.11中所做的事情?

根据dirkgroten的回答,这就是我最终在模板中所做的事

{% with id=widget.attrs.id %}
{% for group, options, index in widget.optgroups %}
    {% for option in options %}
        {% include option.template_name with widget=option %}
    {% endfor %}
{% endfor %}
{% endwith %}

2 个答案:

答案 0 :(得分:6)

在Django 1.11中,定义小部件的方式发生了很大变化。但它使定制更容易。 RadioSelect窗口小部件使用multiple_input.html模板。删除<ul>的最佳选择是执行以下操作:

  • 子类RadioSelect使用您自己的模板:

    class MyRadioSelect(RadioSelect):
        template_name = 'my_widgets/radio.html'
    
  • multiple_input.html(标准django模板)代码复制到您自己的模板中(&#34; my_widgets / radio.html &#34;并按照您想要的方式调整所有内容。您可以使用<div>代替<ul><li>或任何您想要的内容。

  • 在您的表单中,使用您自己的小部件:

    options = ChoiceField(widget=MyRadioSelect)
    

答案 1 :(得分:0)

我猜你已经有一个form.py,用于存储表单。

在要作为单选按钮呈现的相应表单和字段中,使其如下所示:

choices_field = forms.ChoiceField(
    widget=forms.RadioSelect(attrs={'class': 'some-class-here'})
)

重要的是在RadioSelectChoiceField等中使用ModelChoiceField窗口小部件。