Flask的render_template()问题

时间:2019-06-12 14:53:46

标签: python html selenium http flask

我正在开发Flask Web应用程序。

要访问内容和功能,您需要登录。

但是,有时登录后立即加载而不是加载整个主页,而是加载了空白的“ about:srcdoc”页面。

我在整个家庭路由功能中放置了打印语句,现在我知道仅在返回render_template()开始运行之后(根据命令提示符,由render_template发送get请求之后),才会发生此错误。

base.html:

<html>
    <head>
        <title>Veritas Annotator</title>
    </head>
    <body>
        <script src="https://code.jquery.com/jquery-3.4.1.js" integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU=" crossorigin="anonymous"></script>
        {%if session['logged_in']%}
        <div><h4><a href="/">Annotator</a> | Logged in as "{{ session['username'] }}" | <a href="/logout">Logout</a></h4></div>
        <hr>
        {%else%}
        <div><h4><a href="/register">Register</a> | <a href="/login">Login</a></h4></div>
        <hr>
        {%endif%}
        {% block content %}{% endblock %}
        <style>
        body{
            margin: 0;
            padding: 0;
            }
        .column{
            width: 40%;
            padding: 10px;
            }

        .left{
            float: left;
            }

        .right{
            float: right;
            }

        .row:after {
            content: "";
            display: table;
            clear: both;
            }

        h4 {
            color: black;
            text-align: center;
            font-family: Arial;
            font-size: 20px;
            vertical-align: bottom;
            }
        </style>
    </body>
</html>

index.html(为简化起见,简称:)

{% extends "base.html" %}
{% block content %}
{% if not session['logged_in'] %}
    <h4>Please, log in to annotate.</h4>
{% else %}
    {% if t1,t2 %}

<meta name="viewport" content="width=device-width, initial-scale=1">
<div class="row" style="width: 100%; height: 80%; min-height: 600px;">
    <div class="column left" style="width:50%; position: relative; display: inline-block; margin: 0; border: 0; padding: 0;">
      <iframe id="cframe" style="display: block" width="100%" height="100%" srcdoc="{{t1}}"></iframe>
    </div>
    <div class="column right" style="width:50%; position: relative; display: inline-block; margin: 0; border: 0; padding:0;">
      <iframe id="oframe" style="display: block" width="100%" height="100%" srcdoc="{{t2}}"></iframe>
    </div>
</div>
    {% endif %}
{% endif %}
{% endblock %}

Python片段(为清楚起见,变量较少):

return render_template('index.html', t1=c_body, t2=o_body)

其中c_body和o_body都是使用硒浏览器检索的页面源。page_source


根据命令提示符,在该错误之前发生的最后一件事是(请注意,此错误并非总是错误之前的http代码,有时它是代码200而不是404):

"GET /api-proxy/-/locale_data/rendr-fe/de-DE/bbd065fad57e0e1eeb40f4f3d5045acf_b8cf454f8216fc48b02d6b403858fbbe2fa3ef36.js HTTP/1.0" 404 -

如果任何人以前了解过该请求的含义或曾遇到此问题,我们将非常感谢您的帮助。我已经在网上寻找了几天,但似乎找不到任何资料来解释正在发生的事情。

EDIT1 :此处完整代码=> https://github.com/MohamedMoustafaNUIG/AnnotatorVM

EDIT2 :如果您认为我应该在问题中加入其他信息,请随时提及(即使您不知道解决方案)。如果不解决此问题,该应用程序将无法稳定发布,这意味着需要花费超过3周的时间才能完成工作。

EDIT3:已打开的“ about:srcdoc”页面的html:

<html>
<head></head>
<body></body>
</html>

(在开发工具中)没有控制台消息

1 个答案:

答案 0 :(得分:0)

iframe中的某些组件似乎正在将父级导航到about:scrdoc

解决此问题所需要做的就是向iframe添加沙箱属性,并且仅限制顶部导航。