0

我想在 AJAX 和常规 HTTP 调用之间共享一个模板,唯一的区别是一个模板需要扩展 base.html html,而另一个不需要。

我可以用

{% extends request.is_ajax|yesno:"app/base_ajax.html,app/base.html" %}

动态决定何时扩展,但我还需要包含{% block 'some_div' %}{% endbock %}标签来告诉渲染器将我的内容放在哪里。ajax 调用需要忽略这些标签,因为 jQuery 告诉它在哪里放置$('somediv').html(response).

关于如何在不是 ajax 调用时动态包含这些块标签的任何想法?

我一直在参考这个问题来弄清楚:

有什么方法可以使 {% extends '...' %} 有条件?- 姜戈

尝试通过 {% if %} 使其工作:

{% extends request.is_ajax|yesno:",stamped/home.html" %}
{% if request.is_ajax == False%}
{% block results %}
{% endif %}
{% load stamped_custom_tags %}

...
Content
...
{% if request.is_ajax == False%}
{% endblock %}
{% endif %}

但是当解析器遇到 {% endif %}

4

2 回答 2

1

这或一些变体不会吗?

{% if request.is_ajax %}
    {# ajax! #}
{% else %}
    {% block 'some_div' %}{% endbock %}
{% endif %}
于 2013-08-27T18:24:57.167 回答
0

我的解决方案:

{% extends x|yesno:"stamped/blank.html,stamped/home.html" %}

其中blank.html包含:

{% block results %}{% endblock %}

<!-- to allow for corrected shared rendering 
    with ajax posts and normal django rendering -->

并且home.html是我的标准应用程序页面,其中包含要扩展的结果块。

于 2013-09-05T13:47:51.670 回答