{% extends "/base.html" %}
{% block body %}
hello world
{% endblock body %}
base.html
{% if not ajax %}
<html>
<head></head>
<body>
LOGO and other stuff...
{% endif %}{% block body %}{% endblock body %}{% if not ajax %}
FOOTER
</body>
</html>
{% endif %}
虽然不能将
extends
包装在逻辑块中,但如果使用它,它必须是第一个标记,因此仍然可以接受变量,包括筛选器。这应该很符合你的目的:注意:
yesno
过滤器也接受空值(None
)作为第三个选项,如果您不指定一个(在本例中),它将回退到将其转换为False
(即,它将返回第二个选项)。这允许您在模板中不指定ajax
变量而不破坏它。建议由user Rafael:
只有在使用
RequestContext
上下文而不是普通的Context
对象并且启用了request
上下文处理器时,或者在模板上下文中插入请求对象时,这才有效。我在寻找同一问题的解决方案,并且找到了比
Klaus Byskov Hoffmann
建议的更好的解决方法。这更好,因为您不必为ajax和非ajax请求拥有两个独立的基本模板,而且更重要的是,您不必定义if语句,该语句将定义在每个控制器中使用哪个基本模板。在您的情况下,解决方案是:
页面.html
base.html
因此,总是包含base.html,但它仅在
not ajax
时打印其内容。更新:可以通过创建和添加一个新的ConextProcessor来简化此过程,该ConextProcessor将从
HttpRequest.is_ajax()
中填充ajax
上下文变量,因此您根本不必在控制器和模板中执行任何额外的操作。你不能那样做。但是,您可以设置一个变量并使用该变量选择要扩展的模板:
然后在python代码中编写如下内容:
您可能希望refer to the documentation了解更多信息。
相关问题 更多 >
编程相关推荐