如何修改Django ModelForm字段attrs以正确显示样式?
Django表单样式不生效的修复方案
你的代码里有两个关键错误导致样式无法生效:
- 类的初始化方法拼写错误:
__int__应为__init__,拼写错误会导致该方法完全不会被执行 - 遍历字段时调用了错误的方法:
self.fields.item()应为self.fields.items(),字典的键值对遍历方法是items(),少了字母s会引发异常或无法遍历
修复后的完整代码如下:
from django.forms import ModelForm from django import forms from .models import Project class ProjectForm(ModelForm): class Meta: model = Project fields = ['title', 'featured_image', 'description', 'demo_link', 'source_link', 'tags'] widgets = { 'tags': forms.CheckboxSelectMultiple(), } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 为所有字段的控件添加input类 for name, field in self.fields.items(): field.widget.attrs.update({'class': 'input'})
修复后,表单初始化时会自动给所有字段的控件添加input样式类,样式就能正常生效。如果需要给特定字段单独设置样式,可以在遍历后单独修改对应字段,比如:
# 单独给title字段设置额外样式 self.fields['title'].widget.attrs.update({'class': 'input title-input'})
内容的提问来源于stack exchange,提问作者Xinyu Yang
相关产品推荐
相关产品推荐

