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

Copyright ©2020 All rights reserved