Bootstrap 的 Django 小部件
Django Widgets with Bootstrap
我正在尝试使用 bootstrap 来设计我的表单。如您所知,bootstrap 使用大量 classes 来完成它的工作。通过谷歌搜索,我发现在我的表单中注入一些新的 classes 我可以将小部件与 django 一起使用。我的表格如下:
class SignUpForm(UserCreationForm):
first_name = forms.CharField(max_length=30)
last_name = forms.CharField(max_length=30)
email = forms.EmailField()
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['password1'].label = 'Password'
self.fields['password2'].label = 'Password Confirmation'
self.fields['first_name'].label = 'First Name'
self.fields['last_name'].label = 'Last Name'
self.fields['password1'].help_text = None
self.fields['password2'].help_text = None
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2' )
help_texts = {
'username': None,
}
widgets = {
'username': forms.TextInput(
attrs={
'class': 'form-control'
}
),
'first_name': forms.TextInput(
attrs={
'class': 'form-control'
}
),
'last_name': forms.TextInput(
attrs={
'class': 'form-control'
}
),
'email': forms.EmailInput(
attrs={
'class': 'form-control'
}
),
'password1': forms.PasswordInput(
attrs={
'class': 'form-control'
}
),
'password2': forms.PasswordInput(
attrs={
'class': 'form-control'
}
)
}
但出于某种原因,这仅将 class 应用于 HTML 中的用户名字段。它不会将 class 'form-control' 应用于任何其他内容。这是我忽略的一些简单格式问题还是我做错了什么?非常感谢任何帮助!
Meta.widgets
仅适用于自动创建的表单域。如果您手动创建其中一些,则需要在那里指定您的小部件。
class SignUpForm(UserCreationForm):
first_name = forms.CharField(max_length=30, widget=forms.TextInput(
attrs={
'class': 'form-control'
}
))
last_name = forms.CharField(max_length=30, widget=forms.TextInput(
attrs={
'class': 'form-control'
}
))
email = forms.EmailField(widget=forms.EmailInput(
attrs={
'class': 'form-control'
}
))
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['password1'].label = 'Password'
self.fields['password2'].label = 'Password Confirmation'
self.fields['first_name'].label = 'First Name'
self.fields['last_name'].label = 'Last Name'
self.fields['password1'].help_text = None
self.fields['password2'].help_text = None
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2' )
help_texts = {
'username': None,
}
widgets = {
'username': forms.TextInput(
attrs={
'class': 'form-control'
}
),
'password1': forms.PasswordInput(
attrs={
'class': 'form-control'
}
),
'password2': forms.PasswordInput(
attrs={
'class': 'form-control'
}
)
}
这只解释了 first_name
、last_name
和 email
的情况。对于 password1
和 password2
情况实际上是一样的,但是有点模糊,因为这些字段是在您的父 class、UserCreationForm
中手动定义的。您需要再次定义它们以更改小部件。或者,您可以覆盖表单 class.
的 __init__
中的小部件
我正在尝试使用 bootstrap 来设计我的表单。如您所知,bootstrap 使用大量 classes 来完成它的工作。通过谷歌搜索,我发现在我的表单中注入一些新的 classes 我可以将小部件与 django 一起使用。我的表格如下:
class SignUpForm(UserCreationForm):
first_name = forms.CharField(max_length=30)
last_name = forms.CharField(max_length=30)
email = forms.EmailField()
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['password1'].label = 'Password'
self.fields['password2'].label = 'Password Confirmation'
self.fields['first_name'].label = 'First Name'
self.fields['last_name'].label = 'Last Name'
self.fields['password1'].help_text = None
self.fields['password2'].help_text = None
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2' )
help_texts = {
'username': None,
}
widgets = {
'username': forms.TextInput(
attrs={
'class': 'form-control'
}
),
'first_name': forms.TextInput(
attrs={
'class': 'form-control'
}
),
'last_name': forms.TextInput(
attrs={
'class': 'form-control'
}
),
'email': forms.EmailInput(
attrs={
'class': 'form-control'
}
),
'password1': forms.PasswordInput(
attrs={
'class': 'form-control'
}
),
'password2': forms.PasswordInput(
attrs={
'class': 'form-control'
}
)
}
但出于某种原因,这仅将 class 应用于 HTML 中的用户名字段。它不会将 class 'form-control' 应用于任何其他内容。这是我忽略的一些简单格式问题还是我做错了什么?非常感谢任何帮助!
Meta.widgets
仅适用于自动创建的表单域。如果您手动创建其中一些,则需要在那里指定您的小部件。
class SignUpForm(UserCreationForm):
first_name = forms.CharField(max_length=30, widget=forms.TextInput(
attrs={
'class': 'form-control'
}
))
last_name = forms.CharField(max_length=30, widget=forms.TextInput(
attrs={
'class': 'form-control'
}
))
email = forms.EmailField(widget=forms.EmailInput(
attrs={
'class': 'form-control'
}
))
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['password1'].label = 'Password'
self.fields['password2'].label = 'Password Confirmation'
self.fields['first_name'].label = 'First Name'
self.fields['last_name'].label = 'Last Name'
self.fields['password1'].help_text = None
self.fields['password2'].help_text = None
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2' )
help_texts = {
'username': None,
}
widgets = {
'username': forms.TextInput(
attrs={
'class': 'form-control'
}
),
'password1': forms.PasswordInput(
attrs={
'class': 'form-control'
}
),
'password2': forms.PasswordInput(
attrs={
'class': 'form-control'
}
)
}
这只解释了 first_name
、last_name
和 email
的情况。对于 password1
和 password2
情况实际上是一样的,但是有点模糊,因为这些字段是在您的父 class、UserCreationForm
中手动定义的。您需要再次定义它们以更改小部件。或者,您可以覆盖表单 class.
__init__
中的小部件