Django template inheritance и ajax?

Я только-только начал поглядывать в сторону Python+Django, поэтому знаком с ними на уровне чтения документации.

Насколько я понимаю, в шаблонах Django {% extends base.html %} должен идти первой строчкой. Однако, хотелось бы иметь возможность не наследоваться от базового шаблона, если это ajax-запрос. Условие сюда, видимо, написать нельзя, поэтому на данный момент очевиден только такой вариант:

Во view проверяем, не ajax-ли запрос. Если ajax — рендерим, к примеру,view-ajax.html. Иначе — view.html в котором:

{% extends base.html %}<br/>
###<br/>
{% include view-ajax.html %}




Однако, этот вариант не выглядит привлекательным. Как, скажем:



{% notajaxextends base.html %}



Но для такого, казалось бы, очевидного поведения писать, как мне сейчас видится, не самый простой темплейт-тег — кажется сомнительным. Почти уверен что существуют решения. Да и кроме того, при extends мы переопределяем блоки базового шаблона. А так как переопределять становится нечего — что же тогда выводить? Передавать требуемый блок как параметр тега?



{% notajaxextends base.html content %}<br/>
###<br/>
{% block content %} ... {% endblock %}




Поможете начинающему джангисту разрешить эту нелепую дилему?
  • Вопрос задан
  • 3022 просмотра
Пригласить эксперта
Ответы на вопрос 4
@kmike
А чем вариант с инклудом плох-то? Используйте его.
Ответ написан
anatoly_rr
@anatoly_rr
Можно в base.html проверять флаг, и если он установлен — скрывать всё что вне {% block content %}. Не очень красиво, но проще, чем тег.
Ответ написан
Комментировать
FlyinKilla
@FlyinKilla
Есть возможность рендерить определенный блок из шаблона. Возможно вам помогут эти ссылки:
http://djangosnippets.org/snippets/769/
http://djangosnippets.org/snippets/1014/
Ответ написан
@nwalker
{% extends is_ajax|yesno:'ajax_base.html,base.html' %}
где is_ajax = True для ajax-запроса.
не знаю, с какой версии будет работать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы