作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用django-uniform并使用一些统一功能,我正在寻找一种直接从表单声明中添加css类的方法(对于独立窗口小部件)。
(作为奖励,这里是我可重复使用的只读家庭自制混合片段……)
from django import forms
def _get_cleaner(form, field):
def clean_field():
return getattr(form.instance, field, None)
return clean_field
class UniformROMixin(forms.BaseForm):
"""
UniformROMixin, inherits to turn some fields read only
- read_only = list of field names.
"""
def __init__(self, *args, **kwargs):
super(UniformROMixin, self).__init__(*args, **kwargs)
if hasattr(self, "read_only"):
if self.instance and self.instance.pk:
for field in self.read_only:
self.fields[field].widget.attrs['readonly'] = True
self.fields[field].widget.attrs['class'] += "readOnly"
# here I would like to set css class of the label
# created from the self.fields[field].label string
setattr(self, "clean_" + field, _get_cleaner(self, field))
最佳答案
窗口小部件具有attrs
关键字参数,该参数带有dict
,可以为它呈现的输入元素定义属性。表单还具有一些可以定义的属性,以更改Django显示表单的方式。请看以下示例:
class MyForm(forms.Form):
error_css_class = 'error'
required_css_class = 'required'
my_field = forms.CharField(max_length=10,
widget=forms.TextInput(attrs={'id': 'my_field',
'class': 'my_class'}))
Widget
类。不幸的是,如果您只执行
{{ field }}
,就没有一种简单的方法来更改Django呈现标签的方式。幸运的是,您在模板中使用了表单对象:
<form>
{% for field in form %}
<label class="my_class" for="{{ field.auto_id }}">{{ field.label }}</label>
{{ field }}
{% endfor %}
<button type="submit">Submit</button>
</form>
# In a view...
form = MyForm()
form.label_classes = ('class_a', 'class_b', )
# Or by hijacking ```__init__```
class MyForm(forms.Form):
def __init__(self, *args, **kwargs):
self.my_field = forms.CharField(max_length=10,
widget=forms.TextInput(attrs={'id': 'my_field',
'class': 'my_class'}))
self.my_field.label_classes = ('class_a', 'class_b', )
super(MyForm, self).__init__(*args, **kwargs)
<form>
{% for field in form %}
<label class="{% for class in field.label_classes %}{{ class }} {% endfor %}"
for="{{ field.auto_id }}">{{ field.label }}</label>
{{ field }}
{% endfor %}
<button type="submit">Submit</button>
</form>
关于django - 如何在Django表单声明中设置标签的CSS类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6959178/
我是一名优秀的程序员,十分优秀!