我需要渲染没有UL的单选按钮组。在Django 1.9中,我使用this answer,我在很多地方使用它。我升级到Django 1.11,RadioFieldRenderer
是no 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 %}
答案 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'})
)
重要的是在RadioSelect
,ChoiceField
等中使用ModelChoiceField
窗口小部件。