HTML и формы
DRF подходит для возврата как ответов в стиле API, так и обычных HTML-страниц. Кроме того, сериализаторы могут использоваться в качестве HTML-форм и отображаться в шаблонах.
Рендеринг HTML
Для возврата HTML-ответов вам нужно использовать либо TemplateHTMLRenderer, либо StaticHTMLRenderer.
Класс TemplateHTMLRenderer ожидает, что ответ будет содержать словарь данных контекста, и создает HTML-страницу на основе шаблона, который должен быть указан либо в представлении, либо в ответе.
Класс StaticHTMLRender ожидает, что ответ будет содержать строку предварительно отрендеренного HTML-содержимого.
Поскольку поведение статических HTML-страниц обычно отличается от поведения ответов API, вам, вероятно, придется писать любые HTML-представления явно, а не полагаться на встроенные типовые представления.
Вот пример представления, которое возвращает список экземпляров "Profile", отображенный в шаблоне HTML:
views.py:
from my_project.example.models import Profile
from rest_framework.renderers import TemplateHTMLRenderer
from rest_framework.response import Response
from rest_framework.views import APIView
class ProfileList(APIView):
renderer_classes = [TemplateHTMLRenderer]
template_name = 'profile_list.html'
def get(self, request):
queryset = Profile.objects.all()
return Response({'profiles': queryset})profile_list.html:
Рендеринг форм
Сериализаторы можно отображать в виде форм, используя тег шаблона render_form и включая экземпляр сериализатора в качестве контекста в шаблон.
Следующее представление демонстрирует пример использования сериализатора в шаблоне для просмотра и обновления экземпляра модели:
views.py:
profile_detail.html:
Использование пакетов шаблонов
Тег render_form принимает необязательный аргумент template_pack, который указывает, какой каталог шаблонов должен использоваться для рендеринга формы и полей формы.
DRF включает три встроенных пакета шаблонов, все они основаны на Bootstrap 3. Встроенные стили: horizontal, vertical и inline. По умолчанию используется стиль horizontal. Чтобы использовать любой из этих пакетов шаблонов, вам необходимо также включить CSS Bootstrap 3.
Следующий HTML будет ссылаться на версию CSS Bootstrap 3, размещенную в CDN:
Сторонние пакеты могут включать альтернативные пакеты шаблонов, в которые входит каталог шаблонов, содержащий необходимые шаблоны форм и полей.
Давайте рассмотрим, как визуализировать каждый из трех доступных пакетов шаблонов. В этих примерах мы будем использовать один класс сериализатора для представления формы "Вход в систему".
rest_framework/vertical.
rest_framework/vertical.Представляет ярлыки формы над соответствующими входами элементов управления, используя стандартный макет Bootstrap.
Это пакет шаблонов по умолчанию.

rest_framework/horizontal.
rest_framework/horizontal.Представляет ярлыки и элементы управления рядом друг с другом, используя разделение колонок 2/10.
Это стиль формы, используемый в Web-интерфейсе API и администраторских рендерах.

rest_framework/inline.
rest_framework/inline.Компактный стиль формы, который представляет все элементы управления в линию.

Стили полей
Поля сериализатора могут иметь свой стиль рендеринга, настроенный с помощью именованного аргумента style. Этот аргумент представляет собой словарь опций, которые управляют используемым шаблоном и макетом.
Наиболее распространенным способом настройки стиля поля является использование именованного аргумента стиля base_template, чтобы выбрать, какой шаблон из пакета шаблонов следует использовать.
Например, чтобы отобразить CharField как HTML textarea, а не как HTML input по умолчанию, вы должны использовать что-то вроде этого:
Если вы хотите, чтобы поле отображалось с использованием пользовательского шаблона, который не является частью включенного пакета шаблонов, вы можете использовать опцию стиля template, чтобы полностью указать имя шаблона:
Шаблоны полей также могут использовать дополнительные свойства стиля, в зависимости от их типа. Например, шаблон textarea.html также принимает свойство rows, которое можно использовать для изменения размера элемента управления.
Полный список опций base_template и связанных с ними опций стиля приведен ниже.
input.html
Любое строковое, числовое или поле даты/времени
input_type, placeholder, hide_label, autofocus
textarea.html
CharField
rows, placeholder, hide_label
select.html
ChoiceField или типы реляционных полей
hide_label
radio.html
ChoiceField или реляционные типы поля
inline, hide_label
select_multiple.html
MultipleChoiceField или реляционные поля с many=True
hide_label
checkbox_multiple.html
MultipleChoiceField или реляционные поля с many=True
inline, hide_label
checkbox.html
BooleanField
hide_label
fieldset.html
Вложенный сериализатор
hide_label
list_fieldset.html
ListField или вложенный сериализатор с many=True
hide_label
Last updated
Was this helpful?