有什么办法使{%扩展'...'%}有条件吗?-Django


68

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

任何想法?

Answers:


85

使用变量。

{% extends base_template %}

然后在您的视图中将其设置为“ base.html”,或者将其设置为一个新的“ ajax.html”文件,该文件仅提供了该阻止,而没有其他内容。


3
一个问题:这破坏了django-compressor的离线压缩。
肯·金德

129

其他答案要求您传递一个附加的上下文变量。但是只要您可以访问请求对象,就不需要:

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

我发现这更加方便。


{% block 'someblock' %}什么类似的动态方式可以包含吗?
agconti

超级方便,我们正在A / B测试中,并推出新的UI,可变的路线会导致大量工作。您应得到绿色对勾,因为这可以回答问题。
Marc

这解决了django-compressor离线压缩问题。
Theo Kouzelis

@TheoKouzelis如何解决压缩问题?以我的理解,在这种情况下,django-compressor将为这种情况创建一个缓存,app/base.html但不会为app/base_ajax.html尝试加载缓存的模板(在生成的脱机清单中没有键)的情况下失败而创建缓存。
interDist

28
{% extends override_base|default:'base.html' %}

附言:我知道这是一个老问题,但是我在寻找答案时发现了它。也许会帮助遇到相同问题的其他人。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.