Я искал решение той же проблемы и нашел более лучший обходной путь, чем предложено Klaus Byskov Hoffmann
. Это лучше, потому что вам не нужно иметь 2 отдельных базовых шаблона для запросов ajax и non-ajax и, что более важно, вам не нужно определять оператор if, который будет определять, какой базовый шаблон использовать в EACH-контроллере.
В вашем случае решение будет:
page.html
{% extends "/base.html" %}
{% block body %}
hello world
{% endblock body %}
base.html
{% if not ajax %}
<html>
<head></head>
<body>
LOGO and other stuff...
{% endif %}{% block body %}{% endblock body %}{% if not ajax %}
FOOTER
</body>
</html>
{% endif %}
Итак, base.html всегда включен, но печатает его содержимое только тогда, когда not ajax
.
ОБНОВЛЕНИЕ: Это можно упростить, создав и добавив новый ConextProcessor, который будет заполнять переменную контекста ajax
из HttpRequest.is_ajax()
, так что вам вообще не нужно ничего делать в ваших контроллерах и шаблонах.