Django Crispy Forms

django-crispy-forms позволяет легко создавать красивые формы с Bootstrap стилизацией.

Установка

1# Установка пакета
2pip install django-crispy-forms crispy-bootstrap5
1# Или через Poetry
2poetry add django-crispy-forms crispy-bootstrap5

Настройка

1# settings.py
2INSTALLED_APPS = [
3    'crispy_forms',
4    'crispy_bootstrap5',
5]
6
7CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5"
8CRISPY_TEMPLATE_PACK = "bootstrap5"

Использование в формах

 1# forms.py
 2from crispy_forms.helper import FormHelper
 3from crispy_forms.layout import Submit
 4
 5class BookForm(forms.ModelForm):
 6    def __init__(self, *args, **kwargs):
 7        super().__init__(*args, **kwargs)
 8        self.helper = FormHelper()
 9        self.helper.add_input(Submit('submit', 'Сохранить'))
10
11    class Meta:
12        model = Book
13        fields = ['title', 'author']

В шаблоне

1{% load crispy_forms_tags %}
2<form method="post">
3    {% csrf_token %}
4    {% crispy form %}
5</form>

Кастомизация layout

 1from crispy_forms.layout import Layout, Fieldset, Row, Column
 2
 3class BookForm(forms.ModelForm):
 4    def __init__(self, *args, **kwargs):
 5        super().__init__(*args, **kwargs)
 6        self.helper = FormHelper()
 7        self.helper.layout = Layout(
 8            Fieldset(
 9                'Основная информация',
10                Row(
11                    Column('title', css_class='form-group col-md-8'),
12                    Column('author', css_class='form-group col-md-4'),
13                    css_class='form-row'
14                ),
15                'description'
16            ),
17            Submit('submit', 'Сохранить', css_class='btn btn-primary')
18        )

FAQ

Q: Как кастомизировать layout?
A: Используй Layout, Fieldset, Row, Column в helper.

Q: Можно ли использовать с другими CSS фреймворками?
A: Да, есть поддержка Foundation, Bulma и других.