我有一些页面,例如用户协议(protocol),我希望根据其调用方式,带或不带布局(extends
标记)显示。我正在使用 jQuery Fancybox 在 iframe 中加载这些页面。如果禁用 JS,链接应在带有完整布局的新窗口中打开,否则,如果它们位于 iframe 中,则不需要布局。
到目前为止,我正在使用 jQuery 删除页眉/页脚(仅用内容部分替换正文)
if(window.location != window.parent.location) {
$('body').html($('#content'));
}
但是加载永远不会显示的内容(或者更糟糕的是,在 JS 启动之前会显示半秒)似乎是不对的。我想我可以做的是创建一个仅包含内容的部分模板,然后创建两个容器页面,一个带有页眉/页脚,一个没有;它们都包括部分。然后使用 JS 修改链接...这将必须指向不同的 View ,进而调用不同的模板...看起来工作量非常大。有更好的方法吗?
<小时/>@蔡司S:
这样的事情在 Django 中不可能:
{% if not iframe %}
{% extends "layouts/default.html" %}
{% endif %}
{% extends %}
标记必须是模板中的第一个标记,因此不能有条件地注释掉。我想也许我可以在布局本身中做到这一点...然后它会应用于我的所有页面...让我们尝试一下。
最佳答案
使用 Bryan 和 Mark 的答案作为基础,您可以编写自己的上下文处理器: http://docs.djangoproject.com/en/1.2/ref/templates/api/#writing-your-own-context-processors
这样做将允许您在模板中使用 if 语句有条件地提供服务。
可能是最优雅的,因为您仍然可以根据需要使用包装器。
您可以将其与您自己的模板标记结合起来,该标记为您提供扩展功能,但条件基于提供的变量。 (不确定您是否可以复制扩展功能)。
http://docs.djangoproject.com/en/1.2/howto/custom-template-tags/#writing-custom-template-tags
另一个选择是使用 django 的 {% include %}
标记,您可以使用 if 语句包装它。
关于javascript - 如何获得页面的无布局版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3526376/