为什么这不起作用? (Django 1.7和django-crispy-forms 1.4.0)
未应用css类。
class ResourceForm(ModelForm):
def __init__(self, *args, **kwargs):
super(ResourceForm, self).__init__(*args, **kwargs)
self.helper = FormHelper(self)
self.helper.layout = Layout()
self.helper.add_input(Submit('submit', 'Submit'))
self.helper.all().wrap(Field, css_class="col-xs-3 col-sm-4")
class Meta:
model = Resource
fields = ['title',
'....
然后是表单html:
{% load crispy_forms_tags %}
{% block content %}
<div class="col-xs-12 col-sm-12 main_column">
{% crispy form form.helper %}
</div>
{% endblock %}
生成的表单html如下所示:
<form method="post" enctype="multipart/form-data">
<input type='hidden' name='csrfmiddlewaretoken' value='blaahblahblah...' />
<div id="div_id_title" class="form-group">
<label for="id_title" class="control-label requiredField">
Title<span class="asteriskField">*</span>
</label>
<div class="controls ">
<input class="textinput textInput form-control" id="id_title" maxlength="255" name="title" type="text" value="Foo" />
</div>
</div>
....
</form>
即,ModelForm的正常html。
请注意,我使用的是forms.ModelForm
,而不是forms.Form
。
答案 0 :(得分:4)
当您使用
传递的表单致电FormHelper
时
self.helper = FormHelper(self)
它会自动创建一个包含所有字段的布局(see the code):
def __init__(self, form=None):
self.attrs = {}
self.inputs = []
if form is not None:
self.form = form
self.layout = self.build_default_layout(form)
但是当你打电话时
self.helper.layout = Layout()
你摧毁它。所以你没有要包装的字段。
解决方案:删除行self.helper.layout = Layout()