Django Crispy Form {% crispy form %} не показывает ошибок, а {{ form|crispy }} не работает с FormHelper
Как мне заставить работать и помощник макета, и отображение сообщений об ошибках в crispy forms. Я создал простую форму с одним полем для загрузки файла.
# forms.py
class FileUploadForm(forms.Form):
file = forms.FileField(label='File',
validators=[FileExtensionValidator(allowed_extensions=ALLOWED_EXTENSIONS)])
def __init__(self, *args, **kwargs):
print ("==== FileUploadForm:__init__ ====")
super().__init__(*args, **kwargs)
self.helper = FormHelper()
self.helper.form_method = 'post'
self.helper.form_class = 'form-horizontal'
self.helper.form_style = 'inline'
self.helper.label_class = 'col-lg-2'
self.helper.field_class = 'col-lg-8'
self.helper.layout = Layout(
Field('file', css_class='form-control-sm') # Apply Bootstrap's small form-control
)
Я заметил, что помощник макета работает при использовании {% crispy form %}
. Однако он не показывает ошибки, например, когда я оставляю ввод пустым или загружаю недопустимое расширение файла. {% crispy form %} пример
Если я использую {{ form|crispy }}
, то помощник верстки не работает, но ошибки отображаются. {{ form|crispy }} example
Релевантная информация
- django-crispy-forms==2.1
- Django==5.0.6
- crispy-bootstrap5==2024.2
- Python 3.12.5
# html
<!-- Bootstrap 5.3.3 -->
<head>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH"
crossorigin="anonymous">
</head>
<!-- Javascript Bootstrap -->
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"
integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r"
crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.min.js"
integrity="sha384-0pUGZvbkm6XF6gxjEnlmuGrJXVbNuzT9qBBavbLwCsOGabYfZo0T0to5eqruptLy"
crossorigin="anonymous"></script>
# settings.py
INSTALLED_APPS = [
'crispy_forms', # package: crispy form for bootstrap
'crispy_bootstrap5', # bootstrap 5
]
CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5"
CRISPY_TEMPLATE_PACK = "bootstrap5"