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 средство визуализации. Тогда переопределение шаблонов виджетов работает так же, как переопределение любого другого шаблона в вашем проекте.

Copyright ©2021 All rights reserved