FormHelper

Что такое FormHelper и как его использовать, подробно описано в предыдущем разделе Тег {% crispy %} с формами.

FormHelper с прикрепленной формой (макет по умолчанию)

С версии 1.2.0 FormHelper опционально может быть передан экземпляр формы. Это можно сделать следующим образом:

from crispy_forms.helper import FormHelper

class ExampleForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.helper = FormHelper(self)

Когда вы делаете это, crispy-forms строит макет по умолчанию, используя form.fields для вас, так что вам не придется вручную перечислять их все, если ваша форма огромна. Если в дальнейшем вам понадобится манипулировать некоторыми частями большого макета, настоятельно рекомендуется использовать динамические макеты, проверьте Обновление макетов на ходу.

Кроме того, теперь помощник может сопоставлять макет с экземпляром формы, имея возможность поиска по типу виджета, если вы используете динамический API.

Атрибуты помощника, которые вы можете установить

шаблон_пакета

Позволяет установить, какой пакет шаблонов вы хотите использовать на уровне FormHelper. Это полезно, например, когда сайт должен отображать разные формы стилей для разных случаев использования, например, сайт для настольных компьютеров и сайт для смартфонов.

шаблон

When set allows you to render a form/formset using a custom template. Default template is at {{ TEMPLATE_PACK }}/[whole_uni_form.html|whole_uni_formset.html].

шаблон поля

При установке позволяет выводить форму/формообразовательный набор с использованием шаблона пользовательского поля. Шаблон по умолчанию имеет значение {{ TEMPLATE_PACK }}/field.html.

form_method = ``POST``

Specifies form method attribute. You can see it to POST or GET. Defaults to POST.

form_action

Applied to the form action attribute. Can be a named URL in your URLconf that can be executed via the {% url %} template tag. Example: ‘show_my_profile’. In your URLconf you could have something like:

url(r'^show/profile/$', 'show_my_profile_view', name='show_my_profile')

Вы также можете указать его на URL „/whatever/blabla/“.

Иногда вы можете захотеть добавить аргументы к URL, для этого вам придется сделать в вашем представлении:

from django.urls import reverse
form.helper.form_action = reverse('url_name', args=[event.id])
form.helper.form_action = reverse('url_name', kwargs={'book_id': book.id})
attrs

В 1.2.0 добавлен словарь для задания любых атрибутов формы. Знаки подчеркивания в ключах преобразуются в дефисы. Рекомендуемый способ, когда вам нужно установить несколько атрибутов формы, чтобы сохранить порядок в помощнике:

``{'id': 'form-id', 'data_id': '/whatever'}``
<form id="form-id" data-id="/whatever" ...>
form_id

Определяет атрибут id DOM формы. Если id не указан, то атрибут id на форме не создается.

form_class

Строка, содержащая разделенные классы CSS, которые будут применены к атрибуту class формы. По умолчанию форма всегда будет иметь класс „uniForm“.

form_tag = True

Указывает, следует ли отображать теги <form></form> при использовании макета. Если установлено значение False, то форма отображается без тегов <form></form>. По умолчанию установлено значение True.

disable_csrf = False

Отключите CSRF-токен, когда это сделано, crispy-формы не будут использовать тег {% csrf_token %}. Это полезно при рендеринге нескольких форм, использующих тег {% crispy %} и << 2 >>> csrf_token будет отображаться несколько раз.

form_error_title

Если вы выводите форму с помощью тега {% crispy %} и у нее есть non_field_errors для отображения, они выводятся в div. Вы можете задать заголовок div с помощью этого атрибута. Пример: «Ошибки формы».

formset_error_title

Если вы выводите набор форм с помощью тега {% crispy %} и у него есть non_form_errors для отображения, они выводятся в div. Вы можете задать заголовок div с помощью этого атрибута. Пример: «Formset Errors».

form_style = „default“.

Атрибут-помощник для пакета шаблонов uni_form. Uni-form имеет два различных встроенных стиля формы. Вы можете выбрать, какой из них использовать, установив эту переменную в значение default или inline.

form_show_errors = True.

По умолчанию имеет значение True. Решает, отображать или нет ошибки формы. Если установлено значение False, form.errors не будет отображаться, даже если они возникнут. Вам придется вручную выводить их в своем шаблоне. Это позволяет вам настроить вывод ошибок.

render_unmentioned_fields = False.

По умолчанию django-crispy-forms рендерит указанный макет, если он строго существует, что означает, что он рендерит только то, что упоминается в макете, если только в вашей форме не определены Meta.fields и << 1 >>>, в этом случае он использует их. Если вы хотите отображать неупомянутые поля (все поля формы), например, если вы беспокоитесь о том, что забыли упомянуть их, вы должны установить это свойство в Meta.exclude. По умолчанию оно принимает значение True.

render_hidden_fields = False.

По умолчанию django-crispy-forms рендерит указанный макет, если он строго существует. Иногда вас может интересовать рендеринг всех скрытых полей формы, независимо от того, упомянуты они или нет. Полезно при попытке отрисовать формы с макетами как часть набора форм со скрытыми полями первичного ключа. По умолчанию имеет значение False.

render_required_fields = False.

По умолчанию django-crispy-forms рендерит указанный макет, если он строго существует. Иногда вас может заинтересовать рендеринг всех обязательных полей формы, независимо от того, упомянуты они или нет. По умолчанию это значение равно False.

include_media = True

По умолчанию django-crispy-forms рендерит все медиа формы для вас внутри формы. Если вы хотите сами вручную отрисовывать медиа формы за пределами формы, установите это значение в False. Если вы хотите глобально запретить рендеринг медиа формы, переопределите класс FormHelper, изменив этот параметр. По умолчанию он принимает значение True.

Атрибуты помощника Bootstrap

В настоящее время существуют некоторые вспомогательные атрибуты, которые имеют функциональность только для определенного пакета шаблонов. Это не означает, что они не будут поддерживаться для других пакетов шаблонов в будущем.

help_text_inline = False

Устанавливает, должны ли тексты справки отображаться в строке или в блоке. Если установлено значение True, то тексты справки будут отображаться с использованием класса help-inline, в противном случае - с использованием help-block. По умолчанию текстовые сообщения выводятся в блочном режиме.

error_text_inline = True

Устанавливает, выводить ли сообщения об ошибках в строку или в блок. Если установлено значение True ошибки будут отображаться с использованием класса help-inline, в противном случае с использованием help-block. По умолчанию сообщения об ошибках отображаются в режиме inline.

html5_required = False

При установке значения True все обязательные поля ввода будут отображаться с атрибутом HTML5 required=required.

form_show_labels = True

По умолчанию установлено в True. Определяет, нужно ли отображать метки полей формы.

Атрибуты помощника Bootstrap 3

Все предыдущие, bootstrap (версия 2) атрибуты также могут быть установлены в пакете шаблонов bootstrap 3 FormHelpers. Здесь перечислены те, которые доступны только в пакете шаблонов bootstrap3:

label_class = „“.

По умолчанию установлено значение ''. Этот класс будет применяться к каждой метке, что очень удобно при создании горизонтальных форм. Установите его, например, так label_class = col-lg-2.

field_class = „“.

По умолчанию установлено значение ''. Этот класс будет применяться к каждому div controls, обертывающему поле. Это полезно при создании горизонтальных форм. Установите его, например, так field_class = col-lg-8.

Атрибуты помощника Bootstrap 4

Все предыдущие, bootstrap (версии 2 и 3) атрибуты также можно настроить в пакете шаблонов bootstrap 4 FormHelpers. Здесь перечислены те, которые доступны только в пакете шаблонов bootstrap4:

use_custom_control = True

Enables the optional UI customization of the template pack for radio, checkbox, select and file field. Useful when you already have customization based on the default interpretation of the template pack. Setting to False results in the standard bootstrap classes being applied for radio and checkbox, and Django rendering for file field. See table below for examples.

Поле файла требует additional JS для включения его функциональности, оно предоставляется в пакете шаблонов как ванильный JS.

По умолчанию имеет значение True.

Стандарт

Дополнительно

radio

customradio

checkbox

customcheckbox

select

customselect

file

customfile

Атрибуты пользовательского помощника

Возможно, вы хотели бы, чтобы FormHelper делал какую-то дополнительную вещь, которая в настоящее время не поддерживается, или у вас очень специфический случай использования. Хорошо то, что вы можете добавить дополнительные атрибуты, и crispy-forms будет автоматически вводить их в контекст шаблона. Давайте рассмотрим пример, чтобы прояснить ситуацию.

Мы хотим, чтобы некоторые формы имели заглавные буквы, и для этого мы хотим установить имя вспомогательного атрибута labels_uppercase в True или False. Поэтому мы идем и устанавливаем в нашем помощнике:

helper.labels_uppercase = True

В результате crispy-forms введет переменную шаблона Django с именем {{ labels_uppercase }} с соответствующим значением в свои шаблоны, включая field.html, который является шаблоном, отвечающим за отображение поля при использовании crispy-forms. Поэтому мы можем зайти в этот шаблон и настроить его. Нам нужно будет ознакомиться с ним, но следовать ему довольно легко; в конце концов, это просто шаблон Django.

Когда мы находим, где отображаются метки, этот фрагмент кода, если быть более точным:

{% if field.label and not field|is_checkbox and form_show_labels %}
    <label for="{{ field.id_for_label }}" class="control-label {% if field.field.required %}requiredField{% endif %}">
        {{ field.label|safe }}{% if field.field.required %}<span class="asteriskField">*</span>{% endif %}
    </label>
{% endif %}

Строка, которую мы изменим, будет выглядеть так:

{% if not labels_uppercase %}{{ field.label|safe }}{% else %}{{ field.label|safe|upper }}{% endif %}{% if field.field.required %}

Теперь нам нужно только переопределить шаблон поля, для этого вы можете проверить раздел Переопределение шаблонов объектов компоновки.

Предупреждение

Будьте осторожны, в зависимости от того, что вы хотите сделать, иногда использование динамических макетов является лучшим вариантом, проверьте раздел Обновление макетов на ходу.

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