0

我有一个 django 模板 - 通常通过标准获取请求加载的模板。但是,我也想将此模板用于 ajax 获取。

我知道我可以使用 request.is_ajax 来区分调用,从而确定我应该服务哪个页面 - 我不知道如何避免复制。

问题是,页面扩展了一个基本的 htm 文件——一个包含所有花里胡哨的文件(你知道,标题、菜单等)。我不希望它出现在 ajax 页面中!我希望页面出现,而不是扩展基本 htm

我只能认为也许我有两个文件 - 一个只有内容(ajax 版本),另一个扩展基本 htm,并以某种方式导入(不扩展)第一个文件......

任何想法我将如何做上述,或者我打算如何解决这个问题?

4

3 回答 3

12

除了@Daniel 响应,如果您有上下文处理器,您可以使用yesno模板过滤器,例如request

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

此行应该在您用于页面和 ajax 内容的每个模板中。

于 2012-06-12T13:09:08.017 回答
3

的值extends可以是变量。因此,您只需定义一个base_ajax省略“花里胡哨”的 html,并在您的视图中发送base或发送base_ajax到模板上下文,具体取决于。

于 2012-06-12T13:03:15.943 回答
0

解决方案 1:

base.html:

{% block menu %}
menu goes here
{% endblock menu %}

非ajax.html:

{% extends base.html %}

ajax.html:

{% extends base.html %}

{% block menu %}
{% end block %}

解决方案2:

使用相同的 base.html

ajax 和非 ajax.html:

{% extends base.html %}
{% ifequal ajax %}
{% block menu %}
{% end block %}
{% endifequal %}
于 2012-06-12T13:04:51.583 回答