如何获得页面的无布局版本?

时间:2010-08-19 21:24:20

标签: javascript jquery django fancybox

我有一些页面,例如我想要显示或不显示布局(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 %}标记必须是模板中的第一个标记,因此无法有条件地注释掉它。我想也许我可以在布局中做到这一点......然后它适用于我的所有页面....让我们尝试一下。

3 个答案:

答案 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}传递到您的模板中。瞧!不像我想象的那么糟糕。