Изменение класса по умолчанию для 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"}

Ссылки и цитаты из Django Crispy Form Doc

Вернуться на верх