Скажем, у вас есть представление под названием "View Story", которое представляет собой веб-страницу, отображаемую на бэкэнд через Python/Django. На этой странице список комментариев внизу представлен как часть шаблона "Просмотр истории" с использованием системы шаблонов Django (в цикле). Эта страница также позволяет добавить комментарий к списку. Это делается через AJAX, и страница обновляется с новым комментарием (без отправки нового полного запроса страницы).
Теперь, добавляя новый комментарий в конец списка, я хочу, чтобы HTML, сгенерированный для этого нового комментария (что-то внутри <li>
), использовал тот же самый код, который использовался для создания исходных комментариев, отправленных на клиент по исходному запросу.
Существует несколько способов сделать это:
-
Первичный рендеринг выдает данные комментария в переменную javascript, и после того, как страница будет отображаться, добавьте контент через javascript. Затем, когда добавляются новые комментарии, тот же javascript можно использовать для визуализации нового. Проблема: с точки зрения поисковой системы я не уверен, что Google сможет индексировать комментарии, если они созданы после того, как страница была отображена - я предполагаю, что не
-
Каждый раз, когда новый комментарий добавляется через AJAX, запрос ajax возвращает фактический HTML для размещения на странице, а не только данные JSON нового комментария. HTML может быть сгенерирован с использованием того же фрагмента шаблона, который использовался для рендеринга исходной страницы. Проблема заключается в том, что он связывает этот запрос AJAX с конкретным представлением или способ его отображения, который мне не нравится.
-
Аналогично # 2, за исключением того, что делается отдельный запрос для извлечения HTML для нового комментария или, возможно, всех комментариев, а список просто стирается и повторно отображается. Не нравится, что это делает его крайне неэффективным и излишне трудоемким.
Итак, чтобы обобщить, я хочу, чтобы избежать дублирования шаблона/HTML-кода для одного представления. И я хотел бы получить несколько советов о том, что сработало для других, потому что я уверен, что это обычный случай, независимо от технологии в фоновом режиме.
Спасибо!