Python: как отформатировать дату в фейсбуке (ISO 8601) в jinja2? - PullRequest
1 голос
/ 09 июля 2019

При создании приложения фляги для отображения данных о событиях facebook я столкнулся с проблемой форматирования объекта event ['start_time'] (facebook-graph-api). При попытке отформатировать объект в заполнителе jinja в моем файле index.html я получаю сообщение об ошибке: jinja2.exceptions.UndefinedError: 'datetime' не определено. Библиотеки, импортированные в app.py)

Я уже пробовал форматировать событие ['start_date'] в app.py и вставлять его в render_template, который правильно форматировал дату, но печатал только первый ввод под каждым событием в колбе для цикла.

Также искал другие решения. Я пытался использовать dateutil.parser.parse для фильтра событий ['start_time'], аналогично первому значению ошибки - dateutil не определен. Использование strftime для события ['start_time'] и применение фильтра на основе strftime дало мне ошибку: у 'str object' нет атрибута 'strftime'.

Похоже, что я не получаю эти библиотеки из app.py в jinja или это как-то связано с форматом события ['start_time'].

Заранее спасибо за любые подсказки :)

app.py:

from flask import Flask, render_template
import json
import facebook
import datetime
from time import strptime, strftime

# Configure application
app = Flask(__name__)

@app.route("/")
def home():
token = {"EAAFKVKHsjTsBAFvCVusn4Drd2l5BFfJKJKhoQRgW623E96lxekibwJLMIlSXIUl2IUhZAevlnfK7T2NZBMMW7Lil0ZCGxlUlnerEyoGvG5iipMO2JDbmJJyfad39yIjDDeBBul5d6ehWLE8byiCQPTjmxr5ZBAIZD"}

graph = facebook.GraphAPI(token)
events = graph.get_connections(id="me", connection_name="events", fields="id, name, place, start_time, cover")

return render_template("index.html", events=events)

index.html:

{% block body %}
{% for event in events['data'] recursive %}
<div class="container"></div>
<div class="media border p-3">
<img src="img_avatar3.png" alt="John Doe" class="mr-3 mt-3 rounded-circle" style="width:60px;">
<div class="media-body">
<h4><small>{{ event['name'] }}, <i>{{ event['place']['name'] }}</i></small></h4>
<p>{{ datetime.datetime.strptime(event['start_time'],'%Y-%m-%dT%H:%M:%S+0200').strftime("%d.%m.%Y, %H:%M") }}</p>
</div>
</div>
<p></p>
{% endfor %}
{% endblock %}

Ожидаемый результат - формат даты в цикле колбы в соответствии с выбранным форматом (например,% d.% M.% Y,% H:% M) вместо формата ISO.

...