не могу получить момент колбы для отображения дат в сафари - PullRequest
0 голосов
/ 11 ноября 2019

Я пытаюсь научить себя Flask, но я пытаюсь понять, что я не могу отображать даты, используя момент колбы с Safari (13.0.2). Они отображаются нормально в Chrome. Ниже приведено минимальное приложение, демонстрирующее такое поведение.

У меня недостаточно опыта работы с веб-разработчиком, чтобы определить, является ли это ошибкой в ​​flask-момент, ошибкой в ​​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

После некоторого поиска в Google я решил, что мне нужно добавить Access-Control-Allow-Исходный заголовок и обновленная функция просмотра:

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, ошибки исчезнут, и дата отобразится нормально. Мне было бы любопытно, если это можно исправить без отключения проверки ...

...