Django 表单不为输入输出自定义类属性
Posted
技术标签:
【中文标题】Django 表单不为输入输出自定义类属性【英文标题】:Django form doesn't output custom class attributes for inputs 【发布时间】: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 formendfor
循环遍历字段
如果我使用manage.py shell
创建表单实例和模板并渲染它,它会包含类,所以我怀疑视图级别一定发生了一些事情。
有什么想法吗?
【问题讨论】:
【参考方案1】:您需要在视图中使用自定义表单。如果你没有为 CreateView 指定一个 form_class,django 会为你创建一个:
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from myapp.models import MyModel
class MyModelCreate(CreateView):
model=MyModel
form_class = MyBaseForm
def get_context_data(self, **kwargs):
context=super(MyModelUpdate, self).get_context_data(**kwargs)
context['css'] = settings.CSS_PATH
return context
【讨论】:
以上是关于Django 表单不为输入输出自定义类属性的主要内容,如果未能解决你的问题,请参考以下文章
Android Gradle 插件自定义 Gradle 任务 ⑬ ( DefaultTask 中的任务输入和输出属性 | TaskInputs 任务输入接口 | FileCollection )