В нашем проекте у нас было слишком много отдельных представлений Ajax, поэтому имело смысл написать промежуточное ПО и повторно использовать те же представления. Недавно я создал приложение , которое позволяет клиенту запрашивать части любой страницы.
Допустим, страница /usual_page/
имеет этот шаблон:
{% extends "another_template.html" %}
{% block title %}Usual page{% endblock %}
{% block content %}...{% endblock %}
{% block my_widget %}widget code{% endblock %}
Если вы установите промежуточное программное обеспечение и сделаете запрос GET, например /usual_page/?partial=my_widget
, он отправит клиенту следующие данные:
{"blocks": {"my_widget": "widget code"}}
Или, если вы сделаете /usual_page/?partial=title,content
, будет отправлено следующее:
{"blocks": {"title": "Usual page", "content": "..."}}
Другие блоки в родительском шаблоне также могут быть запрошены. Неважно, где находится блок в иерархии, важно только то, что он присутствует на обычной странице (той, у которой нет параметра ?partial
).
В репозитории BitBucket у меня есть демонстрационный проект, в котором есть модуль, который автоматизирует работу. Он позволяет использовать трюк History.pushState, загружать части страниц и вставлять их в документ.