API отрисовки форм ¶
Компоненты формы Django создаются с использованием системы шаблонов Django.
Процесс изготовления формы можно настроить на нескольких уровнях:
- Компоненты могут указывать собственные имена шаблонов.
- Формы и компоненты могут указывать на настраиваемые классы средств визуализации.
- Один шаблон компонента может быть перегружен для каждого проекта. (Повторно используемые приложения обычно не должны перегружать базовые шаблоны, поскольку это может конфликтовать с пользовательскими шаблонами в проекте.)
API низкоуровневого рендеринга ¶
Процесс визуализации шаблонов форм контролируется настраиваемым классом визуализации. Этот класс можно указать, задав параметр FORM_RENDERER
. По умолчанию он содержит .'
django.forms.renderers.DjangoTemplates
'
Также можно определить пользовательский визуализатор путем установки атрибута Form.default_renderer
или с помощью параметра renderer
из Widget.render()
.
Используйте одно из встроенных средств визуализации шаблонов форм или создайте собственное. Пользовательские средства визуализации должны реализовывать метод . Он должен вернуть окончательный шаблон (в виде строки) или сгенерировать .render(nom_gabarit, context, request=None)
TemplateDoesNotExist
Встроенные средства визуализации шаблонов форм ¶
DjangoTemplates
¶
-
класс
DjangoTemplates
¶
Этот рендерер использует независимый движок DjangoTemplates
(не связанный с тем, что вы могли настроить при настройке TEMPLATES
). Он загружает шаблоны, просматривая сначала каталог встроенных шаблонов форм django/forms/templates
, а затем каталоги шаблонов установленных приложений с помощью загрузчика app_directories
.
Если вы хотите создавать шаблоны с настройками на основе вашей настройки TEMPLATES
, например, с помощью процессоров контекста, используйте средство визуализации TemplatesSetting
.
Jinja2
¶
-
класс
Jinja2
¶
Этот рендерер похож на движок DjangoTemplates
, за исключением того, что он использует движок Jinja2
. Шаблоны для встроенных компонентов находятся в, django/forms/jinja2
а установленные приложения могут предоставлять шаблоны в каталоге jinja2
.
Чтобы использовать этот движок, все компоненты вашего проекта и его сторонних приложений должны иметь шаблоны Jinja2. Если вы не предоставите шаблоны для компонентов, у которых их нет, вы не сможете использовать это средство визуализации. Например, django.contrib.admin
не содержит шаблонов Jinja2 для своих компонентов, поскольку они используют теги шаблонов Django.
TemplatesSetting
¶
-
класс
TemplatesSetting
¶
Этот рендерер дает полный контроль над обработкой шаблонов компонентов. Он используется get_template()
для поиска шаблонов компонентов на основе того, что настроено в настройке TEMPLATES
.
Для использования этого средства визуализации вместе со встроенными шаблонами компонентов требуется одно из двух условий:
'django.forms'
естьINSTALLED_APPS
и хотя бы один двигатель сAPP_DIRS=True
.Каталог приспособлений для интегрированных компонентов должен находиться в настройке
DIRS
хотя бы одного из приспособлений для приспособлений. Чтобы создать этот путьimport django django.__path__[0] + '/forms/templates' # or '/forms/jinja2'
Использование этого механизма визуализации требует, чтобы можно было найти шаблоны форм, которые требуются проекту.
Контекст доступен в шаблонах компонентов ¶
Шаблоны компонентов получают контекст от Widget.get_context()
. По умолчанию компоненты получают одно значение в контексте widget
. Это словарь, содержащий такие значения, как:
name
valeur
attrs
is_hidden
template_name
Некоторые компоненты добавляют в контекст другую информацию. Например, все компоненты, унаследованные от Input
define widget['type']
и MultiWidget
define, widget['subwidgets']
дают возможность создавать циклы.
Новое определение встроенных шаблонов компонентов ¶
У каждого компонента есть атрибут template_name
со значением, например input.html
. Шаблоны для компонентов, поставляемых с Django, хранятся в пути django/forms/widgets
. Например, вы можете предоставить собственный набор элементов input.html
при создании django/forms/widgets/input.html
. См. В разделе « Интегрированные компоненты» название шаблона для каждого компонента.
Чтобы переопределить шаблоны компонентов, необходимо использовать средство визуализации TemplatesSetting
. Затем замена шаблонов компонентов работает так же, как замена любого другого шаблона в проекте.