Как создавать собственные пакеты шаблонов

Сначала вам нужно будет назвать свой пакет шаблонов, для этого нельзя использовать название одного из доступных пакетов шаблонов в 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, если вы хотите использовать их в будущем, вам придется адаптировать ваши шаблоны, добавив эти переменные и их обработку.

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