Изменение класса по умолчанию для Bootstrap Crispy Form
Я использую Crispy Forms с Bootstrap4. В настоящее время все поля ввода отображаются с классом form-control. Я хочу добавить form-control-lg к полям ввода.
Я пробовал следующее, но это не работает
forms.py
class UserRegisterForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2', 'first_name', 'last_name']
help_texts = {
'username': None,
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['password1'].help_text = None
self.fields['password2'].help_text = None
self.fields['password2'].label = "Confirm Password"
self.helper = FormHelper()
self.helper.layout = Layout(
Field(
'username', css_class="form-control form-control-lg my-custom-class"
)
)
Шаблон
<div class="content-section">
<form method="POST" action="">
<h3>Sign Up</h3>
<hr>
{% csrf_token %}
{{ form | crispy }}
</br>
<button type="submit" class="btn btn-primary">Sign Up</button>
</form>
</div>
Также, могу ли я изменить класс глобально для всех полей ввода?
Следуя шаблону, который у вас уже есть. Давайте начнем с этого метода:
1.
class UserRegisterForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2', 'first_name', 'last_name']
help_texts = {
'username': None,
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['password1'].help_text = None
self.fields['password2'].help_text = None
self.fields['password2'].label = "Confirm Password"
self.helper = FormHelper()
# Attach to helper
self.helper.form_class = 'form-control-lg'
FormHelper имеет список устанавливаемых атрибутов, которые влияют в основном на атрибуты формы.
Давайте посмотрим, как отобразить форму в шаблоне. Предположим, что у нас есть форма в контексте шаблона как example_form, мы отобразим ее следующим образом:
{% load crispy_forms_tags %}
{% crispy example_form example_form.helper %}
Обратите внимание, что тег {% crispy %} ожидает два параметра: сначала переменную формы, а затем помощника. В данном случае мы используем FormHelper, прикрепленный к форме, но вы также можете создать экземпляр FormHelper и передать его в качестве контекстной переменной. В большинстве случаев вы захотите использовать прикрепленный помощник. Обратите внимание, что если вы назовете свой FormHelper атрибутом helper, вам нужно будет сделать только:
{% crispy form %}
Внутри проекта settings.py добавьте эту строку
CRISPY_CLASS_CONVERTERS = {'textinput': "textinput inputtext"}
Например, эта настройка создаст <input class "textinput inputtext" ..... Ключ словаря textinput - это класс по умолчанию Django, значение - то, чем вы хотите его заменить, в данном случае мы оставляем textinput.
Так что сверху можно подставить следующим образом:
CRISPY_CLASS_CONVERTERS = {'input-control': "input-control-lg inputtext"}