如何识别是否在iframe中加载模板或直接加载到Django中的浏览器窗口?

时间:2015-10-16 09:56:16

标签: django django-templates django-views

我已经阅读了关于一般情况的问题here,但我对如何在Django中执行此操作感兴趣。我假设它将是视图和模板中的代码组合。

细节过多:

更具体地说,如果页面在iframe中加载(使用灯箱),我不想包含顶部菜单和页脚。现在我检查模板中的标志:

{% block header %}
    {% if not lightbox %}{{ block.super }}{% endif %}
{% endblock header %} 

我根据打开页面的网址在视图中设置:

if http_referer and http_referer.__contains__("/specific/page/"):
    context["lightbox"] = True

这显然不灵活。例如,我在每页显示的页脚中都有contact details的链接。如果用户点击它,则会使用灯箱打开iframe(此处我不想再次看到iframe中的页脚和顶部菜单)。但是如果用户在新选项卡中打开链接,我希望有一个页脚和顶部菜单,以便更轻松地导航和样式一致性。请注意,在这两种情况下,用户都是从同一页面打开链接。因此,上述解决方案不起作用。

编辑:

@dotcomly您建议重复的问题非常相似,但在我的情况下没有帮助,因为我严格要使用相同的网址(如上所述)并根据上下文更改内容(如果内容加载到iframe或主窗口)。对另一个问题的(接受)答案建议使用不同的网址,这在我的案例中是不可接受的。

1 个答案:

答案 0 :(得分:0)

暂时我通过将以下脚本添加到可能在iframe中加载的页面的模板来解决我的问题:

<script type="text/javascript">
    function inIframe () {
        try {
            return window.self !== window.top;
        } catch (e) {
            return true;
        }
    }
    if(inIframe()) {
        $('header').css('display', 'none');
        $('footer').css('display', 'none');
        // or anything else you may want to do
    }
</script>