无法获得烧瓶瞬间以在野生动物园中显示日期

时间:2019-11-10 23:49:54

标签: python flask safari momentjs

我正在尝试自学Flask,但是遇到了无法使用Safari浏览器(13.0.2)使用flask-moment显示日期的问题。它们在Chrome中显示正常。下面是一个演示这种行为的最小应用程序。

我对Web开发人员的经验不足,无法确定这是烧瓶瞬间的错误,moment.js的错误,jQuery的错误,还是误解我可以在某个地方进行一些小的更改来解决。我尝试过编辑发送到浏览器的标记,但是我没有运气。具体地说,我将属性“ display:none”更改为“ display:inline”,但这导致显示非格式化时间戳而不是格式化日期(我想总比没有好吗?)。

另一方面,一个运行正常的最小javascript示例表明,它本身并不是moment.js / Safari问题,但我想这与幕后发生的jQuery / bootstrap魔术有关。

main.py:

from flask_bootstrap import Bootstrap
from flask_moment import Moment
from flask import Flask, render_template
from datetime import datetime

app = Flask(__name__)
bootstrap = Bootstrap(app)
moment = Moment(app)

@app.route('/')
def index():
    return render_template('index.html', current_time=datetime.utcnow())

if __name__ == '__main__':
    app.run()

base.html:

{% extends "bootstrap/base.html" %}
{% block head %}
{{ super() }}
  {% block scripts %}
  {{ super() }}
  {{ moment.include_moment() }}
  {% endblock %}
{% endblock %}

{% block content %}
  {% block page_content %}
  {% endblock %}
{% endblock %}

index.html:

{% extends 'base.html' %}

{% block page_content %}
Current time: {{ moment(current_time).format('LLL') }}.
{% endblock %}

Safari的输出: enter image description here

Chrome输出: enter image description here

编辑:一条有用的评论建议我使用Safari开发工具来调查问题。加载JavaScript控制台时,我看到一些错误弹出窗口:

enter image description here

在谷歌搜索后,我确定我需要添加一个Access-Control-Allow-Origin标头,并将视图函数更新为:

from flask import make_response

...

@app.route("/")
def index():
    resp = make_response(render_template('index.html', current_time=datetime.utcnow()))
    resp.headers['Access-Control-Allow-Origin'] = '*'
    return resp

不幸的是,我得到了完全相同的错误集。我还尝试了flask-cors库,该库包含一个cross_origin装饰器,应该可以解决此问题,但结果仍然相同。

编辑2:我已经“解决”了这个问题。 include_moment()函数包含一个参数sri(用于“子资源完整性”),如果为true,则检查所获取的资源是否已被操纵。如果将其设置为false,错误将消失并且日期显示良好。如果不能在不禁用检查的情况下解决此问题,我会很好奇。

0 个答案:

没有答案