我正在使用ModelForm并试图在Django forms.RadioSelect小部件上设置一个css类
class Meta:
model = models.MyModel
fields = ('rating',)
widgets = {
'rating': forms.RadioSelect(attrs={'class':'star'}),
}
但是class ='star'不会在html中呈现。
我也尝试过使用:
def __init__(self, *args, **kwargs):
super(MyModelForm, self).__init__(*args, **kwargs)
self.fields['rating'].widget.attrs['class'] = 'star'
这也没用。我尝试使用forms.Textarea小部件做同样的事情,然后我就能够渲染css类了。
我在这里做错了什么或者RadioSelect不支持class属性(我希望类名应用于所有无线电输入)?
答案 0 :(得分:7)
复选框和广播小部件不会像其他小部件一样从Input
继承。
class属性适用于RadioSelect
,但它会单独应用于每个无线电输入。
例如,请考虑以下形式:
from django import forms
class MyForm(forms.Form):
my_field = forms.ChoiceField(widget=forms.RadioSelect(attrs={'class': 'star'}), choices=(('x', 'x'), ('y', 'y'),))
它将在模板中输出以下html:
<tr><th><label for="id_my_field_0">My field:</label></th>
<td>
<ul>
<li><label for="id_my_field_0"><input value="x" type="radio" class="star" name="my_field" id="id_my_field_0" /> x</label></li>
<li><label for="id_my_field_1"><input value="y" type="radio" class="star" name="my_field" id="id_my_field_1" /> y</label></li>
</ul>
</td>
</tr>
请注意,该类适用于每个input
元素。
答案 1 :(得分:-1)
您可以使用此库:https://pypi.python.org/pypi/django-widget-tweaks
它允许您执行以下操作:
{% load widget_tweaks %}
<!-- add 2 extra css classes to field element -->
{{ form.title|add_class:"css_class_1 css_class_2" }}