【发布时间】:2015-01-15 21:13:06
【问题描述】:
我正在尝试使用 ModelForms 来输出带有自定义 CSS 类的表单:
urls.py:
url(r'^mymodel/add/$',
MyModelCreate.as_view(template_name='add_MyModel.html'),
name='mymodel-add')
views.py:
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from myapp.models import MyModel
class MyModelCreate(CreateView):
model=MyModel
def get_context_data(self, **kwargs):
context=super(MyModelUpdate, self).get_context_data(**kwargs)
context['css'] = settings.CSS_PATH
return context
我已尝试覆盖基本 ModelForm 的 init 并循环遍历所有字段:
class MyBaseForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyBaseForm, self).__init__(*args, **kwargs)
for key in self.fields:
self.fields[key].widget.attrs.update(
{'class' : 'field-class',
'placeholder':self.fields[key].label
})
我已尝试设置 Form 类的 formfield_callback 以添加默认类:
def add_field_classes(f, **kwargs):
field = f.formfield(**kwargs)
if field:
w = field.widget
if 'class' not in field.widget.attrs:
field.widget.attrs['class'] = ''
field.widget.attrs['class'] += ' form_class'
if isinstance(w, forms.widgets.SelectMultiple):
field.widget.attrs['class'] += ' multiselect'
return field
class MyModelForm(forms.ModelForm):
formfield_callback=add_field_classes
...我尝试通过小部件设置属性:
class MyModelForm(forms.ModelForm):
class Meta:
fields = ('field1',)
widgets={'field1':forms.Textarea(attrs={'class':'field-class'}),}
无论我做什么,模板都会输出没有任何类的小部件;我试过只使用{{form}} 并尝试使用{{for field in form}}{{endfor}} 循环遍历字段
如果我使用manage.py shell 创建表单实例和模板并渲染它,它会包含类,所以我怀疑视图级别一定发生了一些事情。
有什么想法吗?
【问题讨论】:
标签: django django-forms django-templates