4

我正在使用 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 只是不支持类属性(我希望将类名应用于所有无线电输入)?

4

2 回答 2

8

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元素。

于 2013-01-04T16:42:13.463 回答
-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" }}
于 2013-03-22T13:08:32.853 回答