我有一些页面,例如我想要显示或不显示布局(extends
标签)的用户协议,具体取决于它的调用方式。我正在使用jQuery Fancybox
在iframe中加载这些网页。如果JS被禁用,链接应该在一个新的窗口中以完整的布局打开,否则,如果它们在iframe中,则它们不需要布局。
截至目前,我正在使用jQuery去除页眉/页脚(仅用内容部分替换正文)
if(window.location != window.parent.location) {
$('body').html($('#content'));
}
但是加载永远不会显示的内容似乎是不对的(或者更糟糕的是,在JS启动之前会显示半秒)。我想我能做的是创建一个只包含内容的局部模板,然后是两个容器页面,一个带页眉/页脚,一个没有;他们都包括部分。然后使用JS修改链接...这将指向不同的视图,这反过来调用不同的模板...似乎是一项非常多的工作。还有更好的方法吗?
@ZeissS:
这样的事情在Django中不:
{% if not iframe %}
{% extends "layouts/default.html" %}
{% endif %}
{% extends %}
标记必须是模板中的第一个标记,因此无法有条件地注释掉它。我想也许我可以在布局中做到这一点......然后它适用于我的所有页面....让我们尝试一下。
答案 0 :(得分:1)
您可以随时传递GET参数并加载其他模板或改变模板本身。
对于某些网址,例如example.com/some/view/?show_simple=yes:
show_simple = request.GET.get('show_simple', False)
if show_simple:
# return minimal template
# return regular template
答案 1 :(得分:1)
使用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语句来包装它。
答案 2 :(得分:0)
修改布局以有条件地包含页眉页脚...
{% if not iframe %}
<div id="header">
...
</div>
{% endif %}
然后将{'iframe':'iframe' in request.GET}
传递到您的模板中。瞧!不像我想象的那么糟糕。