Как создавать собственные пакеты шаблонов¶
Сначала вам нужно будет назвать свой пакет шаблонов, для этого нельзя использовать название одного из доступных пакетов шаблонов в crispy-forms, из-за коллизии названий. Допустим, в компании, в которой мы работаем, дизайнер придумал CSS bootstrap, известный как chocolate
. В компании есть проект Django, который должен начать использовать chocolate
, поэтому нам нужно создать папку с именем chocolate
в нашей директории шаблонов. Проверьте настройки TEMPLATE_DIRS
в Django и выберите предпочтительный путь.
После создания этой папки нам нужно будет создать конкретную иерархию каталогов, чтобы crispy-forms мог ее подхватить. Вот как выглядит пакет шаблонов bootstrap (v2):
.
├── accordion-group.html
├── accordion.html
├── betterform.html
├── display_form.html
├── errors.html
├── errors_formset.html
├── * field.html
├── layout
│ ├── alert.html
│ ├── * baseinput.html
│ ├── button.html
│ ├── checkboxselectmultiple.html
│ ├── checkboxselectmultiple_inline.html
│ ├── div.html
│ ├── field_errors.html
│ ├── field_errors_block.html
│ ├── field_with_buttons.html
│ ├── fieldset.html
│ ├── formactions.html
│ ├── help_text.html
│ ├── help_text_and_errors.html
│ ├── multifield.html
│ ├── prepended_appended_text.html
│ ├── radioselect.html
│ ├── radioselect_inline.html
│ ├── tab-link.html
│ ├── tab.html
│ └── uneditable_input.html
├── table_inline_formset.html
├── * uni_form.html
├── uni_formset.html
├── * whole_uni_form.html
└── whole_uni_formset.html
Успокойтесь, не паникуйте, нам не понадобится столько шаблонов для нашего пакета шаблонов. Шаблоны также довольно просты, если вы понимаете, какую проблему решает crispy-forms. Необходимый минимум - это шаблоны, отмеченные звездочкой.
Основы¶
Во-первых, начиная с версии crispy-forms 1.5.0, пакеты шаблонов являются самодостаточными, вы не можете ссылаться на шаблон из другого пакета шаблонов.
У crispy-forms много возможностей, но, возможно, вам не нужно, чтобы ваш пакет шаблонов охватывал их все. {% crispy %}
templatetag рендерит формы, используя глобальную структуру, содержащуюся в whole_uni_form.html
. Однако фильтр |crispy
использует uni_form.html
. Как вы уже, наверное, догадались, название шаблонов происходит из старых добрых времен django-uni-form. В любом случае, в качестве примера, если мы не используем |crispy
фильтр, нам не нужно поддерживать шаблон uni_form.html
в нашем пакете шаблонов.
Если мы планируем использовать наборы форм + {% crispy %}
, нам понадобится whole_uni_formset.html
, вместо этого, если мы используем наборы форм + |crispy
, нам понадобится uni_formset.html
.
Все эти шаблоны используют тег с именем {% crispy_field %}
, который загружается при выполнении {% load crispy_forms_field %}
, который генерирует html для <input>
, используя шаблон field.html
, но предварительно выполняя подготовку Python. Если вам интересно, код для этого тега находится в crispy_forms.templatetags.crispy_forms_field
, вместе с некоторыми другими вещами.
Таким образом, пакет шаблонов для очень базового примера, охватывающего только формы и использование тега {% crispy %}
, потребует 2 шаблона: whole_uni_form.html
, field.html
. Это не совсем верно, потому что каждый объект макета имеет свой шаблон. Так что если бы мы хотели использовать Div
, нам бы понадобился div.html
. Некоторые объекты не так очевидны, если вам нужно Submit
, то вам понадобится baseinput.html
. Некоторые объекты компоновки не имеют шаблона, например HTML
.
В предыдущем дереве шаблонов есть некоторые шаблоны, которые находятся там в целях DRY, они не являются обязательными или частью объекта макета, так что не волнуйтесь слишком сильно.
Начало¶
Теперь ваш лучший вариант - начать копировать некоторые или все шаблоны из существующего пакета шаблонов crispy-forms, например, bootstrap3
, затем отбросить те, которые вам не нужны. Следующим шагом будет редактирование этих шаблонов и корректировка HTML/CSS для приведения их в соответствие с chocolate
, что иногда означает удаление/добавление div’ов, классов и прочего. Вы всегда можете создать форму в вашем приложении с помощником, прикрепленным к новому пакету шаблонов, и сразу же начать опробовать вашу адаптацию.
В настоящее время существует пакет шаблонов для crispy-forms, который не входит в ядро, разработанный Дэвидом Тенедоном как внешнее подключаемое приложение под названием crispy-forms-foundation, с ним также можно ознакомиться.
Обратите внимание, что crispy-forms развивается и добавляет новые FormHelper.attributes
, если вы хотите использовать их в будущем, вам придется адаптировать ваши шаблоны, добавив эти переменные и их обработку.