我正在尝试使用 Django ModelForm 编写 Bootstrap 表单。我已阅读 Django 文档有关表单的 Django 文档 https://docs.djangoproject.com/en/dev/topics/forms/#customizing-the-form-template,所以我有这个代码:
<div class="form-group">
{{ form.subject.errors }}
<label for="{{ form.subject.id_for_label }}">Email subject:</label>
{{ form.subject }}</div>
The {{表格.主题}}由 Django 渲染,例如在 CharField 字段模型中,如下所示input tag,
<input type="text"....> etc.
我需要添加“形式控制”类到每个输入以获得 Bootstrap 输入外观(无需第三方包)。我找到了这个解决方案Django 添加类到表单 字段 https://stackoverflow.com/questions/5285396/django-add-class-to-form-input-field。有没有办法默认为每个字段添加一个类,而不需要在 Form 类的类的每个属性中指定它?
class ExampleForm(forms.Form):
name = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}))
email = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}))
address = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}))
country = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}))
等等 ..
如果您无法使用第三方应用程序并希望以 DRY 方式向表单中的每个字段添加类(例如“form-control”),则可以在表单类中执行此操作__init__()
像这样的方法:
class ExampleForm(forms.Form):
# Your declared form fields here
...
def __init__(self, *args, **kwargs):
super(ExampleForm, self).__init__(*args, **kwargs)
for visible in self.visible_fields():
visible.field.widget.attrs['class'] = 'form-control'
如果由于某种原因您要以声明方式添加类,您可能还需要检查 attrs 中的现有类and within __init__()
。上面的代码没有考虑到这种情况。
值得一提:
您指定不想使用第三方软件包。然而,我会花一点时间提一下,自动使表单以 Bootstrap 风格呈现的最简单方法之一是使用django-crispy-forms http://django-crispy-forms.readthedocs.org/en/latest/, 像这样:
# settings.py
CRISPY_TEMPLATE_PACK = 'bootstrap3'
# forms.py
from crispy_forms.helper import FormHelper
class ExampleForm(forms.Form):
# Your declared form fields here
...
helper = FormHelper()
# In your template, this renders the form Bootstrap-style:
{% load crispy_forms_tags %}
{% crispy form %}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)