Django:编写一个模板标签,删除它之外的内容

时间:2011-09-20 07:53:00

标签: django django-templates

我正在编写一个站点,并且使用Ajax或正常请求请求一些页面。当然,在使用Ajax进行请求时,我想渲染一个略有不同的模板。我已经尝试了几种方法(一个很好的想法但是有错误的render_block片段,使用{%include%}分隔模板,同时分解代码,使用{%ifnot request.is_ajax%}来呈现内容,如工具栏或菜单,只有不是Ajax)。所以我认为这样做真的很酷:

<div> A menu that should not appear with Ajax </div>
{% ajax %}
<div> The Ajax part </div>
{% endajax %}
<div> A footer that should not appear with Ajax </div>

然后正常请求返回:

<div> A menu that should not appear with Ajax </div>
<div> The Ajax part </div>
<div> A footer that should not appear with Ajax </div>

Ajax请求:

<div> The Ajax part </div>

但是,我现在还没有从哪里开始...我已经编写了模板标签,但从来没有做过这么复杂的事情!它甚至可能吗?

1 个答案:

答案 0 :(得分:0)

这听起来像是一种令人困惑的方式 - 我肯定坚持:

{% if not request.is_ajax %}
<div> A menu that should not appear with Ajax </div>
{% endif %}
<div> The Ajax part </div>
{% if not request.is_ajax %}
<div> A footer that should not appear with Ajax </div>
{% endif %}

或者,将模板分开,这样您想要渲染的内容都在一个模板中(我们称之为my_ajax_template.html):

<div> The Ajax part </div>

当响应来自AJAX的请求时,您的视图代码只能呈现该模板,但在响应“正常”请求时,您可以呈现如下所示的模板:

<div> A menu that should not appear with Ajax </div>
{% include 'my_ajax_template.html' %}
<div> A footer that should not appear with Ajax </div>