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"
Вернуться на верх