API отрисовки форм ¶
Виджеты форм Django отображаются с использованием системы шаблонов Django .
Процесс отрисовки формы можно настроить на нескольких уровнях:
- Виджеты могут указывать собственные имена шаблонов.
- Формы и виджеты могут указывать настраиваемые классы средств визуализации.
- Шаблон виджета может быть переопределен проектом. (Повторно используемые приложения обычно не должны переопределять встроенные шаблоны, поскольку они могут конфликтовать с настраиваемыми шаблонами проекта.)
API низкоуровневого рендеринга ¶
Отображение шаблонов форм контролируется настраиваемым классом средства визуализации. Пользовательский рендерер можно указать, обновив FORM_RENDERER
настройку. По умолчанию это
.'
django.forms.renderers.DjangoTemplates
'
Вы также можете предоставить настраиваемое средство визуализации, установив
Form.default_renderer
атрибут или используя renderer
аргумент Widget.render()
.
Используйте один из встроенных средств визуализации форм шаблонов или реализуйте свои собственные. Пользовательские средства визуализации должны реализовывать метод. Он должен возвращать обработанные шаблоны (в виде строки) или увеличивать
.render(template_name, context, request=None)
TemplateDoesNotExist
Встроенные средства визуализации форм ¶
DjangoTemplates
¶
-
класс
DjangoTemplates
¶
Этот рендерер использует автономный
DjangoTemplates
движок (не связанный с тем, что вы могли настроить в
TEMPLATES
настройках). Он загружает шаблоны сначала из каталога встроенных шаблонов форм, django/forms/templates
а затем из каталогов шаблонов установленных приложений с помощью app_directories
загрузчика.
Если вы хотите отображать шаблоны с настройками из ваших
TEMPLATES
настроек, например, обработчики контекста, используйте
TemplatesSetting
средство визуализации.
Jinja2
¶
-
класс
Jinja2
¶
Это средство визуализации такое же, как DjangoTemplates
средство визуализации, за исключением того, что оно использует Jinja2
бэкэнд. Шаблоны для встроенных виджетов находятся внутри, django/forms/jinja2
а установленные приложения могут предоставлять шаблоны в 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
value
attrs
is_hidden
template_name
Некоторые виджеты добавляют дополнительную информацию в контекст. Например, все виджеты этого подкласса Input
определяют widget['type']
и MultiWidget
определяют widget['subwidgets']
в целях зацикливания.
Переопределение встроенных шаблонов виджетов ¶
У каждого виджета есть template_name
атрибут со значением, например
input.html
. Встроенные шаблоны виджетов хранятся в
django/forms/widgets
пути. Вы можете предоставить настраиваемый шаблон для
, например, input.html
определив django/forms/widgets/input.html
. См. В разделе « Встроенные виджеты» название каждого шаблона виджета.
Чтобы переопределить шаблоны виджетов, вы должны использовать TemplatesSetting
средство визуализации. Тогда переопределение шаблонов виджетов работает так же, как переопределение любого другого шаблона в вашем проекте.