Динамическое отображение формы при AJAX-запросе с помощью Django

Введение

Мне кажется, я что-то путаю, как (чистый) AJAX и Django должны использоваться, пока я пытаюсь реализовать следующее:

  1. В представлении отображается список всех объектов модели с кнопками для изменения существующего или создания нового объекта.
  2. При нажатии на такую кнопку открывается модальная форма и выполняется AJAX-запрос для вывода формы
  3. .
  4. Представление Django обрабатывает запрос и рендерит шаблон для запрашиваемой формы с помощью render_to_string
  5. Django.
  6. Рендерированная строка возвращается как контекст с JsonResponse
  7. от Django
  8. Возвращенный JSON используется для отображения формы через JavaScript (modal.innerHTML)
  9. Форма заполняется пользователем и отправляется с помощью AJAX в представление Django, где данные формы будут обработаны
  10. .
  11. Ответ выдается представлением с помощью JsonResponse и показывает успех или ошибки

После реализации шага 5 мне стало интересно, на правильном ли я пути. Использование render_to_string и JsonResponse приводит к появлению некоторого дополнительного пространства перед формой. Это вызвано BOM. Если быть точным, \ufeff дописывает HTML содержащую строку, в результате чего BOM отображается (но не показывается) браузером и вызывает нежелательную дополнительную строку.

Я не нашел другого решения, кроме как использовать replace несколько раз в строке HTML, чтобы избежать BOM (и некоторых дополнительных нежелательных символов) и последующей нежелательной дополнительной строки при отображении формы в модале. Это заставило меня задуматься, правильным ли путем я иду.

Вопрос

Как динамически загружаемый HTML (например, формы) должен быть доставлен с помощью Django и (чистого) AJAX, чтобы сделать возможным что-то вроде того, что я хочу?

Мои соображения на данный момент

Я знаю, что AJAX часто используется с Django для получения набора объектов или выполнения простых запросов (например, удаление), где достаточно чистых данных в качестве ответа, которые обрабатываются/рефакторятся шаблоном. Я не нашел много (и здесь на SO в основном без ответов) о запросе рендеринга HTML страницы с помощью AJAX и Django.

Особенно ненужный BOM говорит мне о том, что разработчик Django, возможно, не хочет использовать его моим способом (иначе было бы более приятное решение, чем удалить его с помощью replace, я думаю). Я прав? Есть какие-нибудь идеи по решению этой проблемы? Я упустил что-то фундаментальное?

В дополнение: Я пытаюсь решить это абстрактно, чтобы загрузить любую форму динамически в модале, и из-за стандартного шаблона рендеринга форм, который я написал, я действительно пытаюсь избежать введения логики рендеринга в каждый шаблон, который должен быть способен показывать динамически загруженные формы (аспект сопровождаемости).

Я знаю о некоторых побочных эффектах асинхронной загрузки HTML, таких как уже установленные события JavaScript не будут работать, когда они должны влиять на динамически загружаемый контент, и на сегодняшний день, кажется, нет проблем с решением этих вещей. Но я буду рад, если кто-то захочет рассмотреть больше возможных ловушек.

HTMX должен сделать этот трюк. Посмотрите

Вернуться на верх