项目印记

预测未来的最好办法,就是把它创造出来。--艾伦.凯(美)

使用 flask-moment 本地化日期和时间

服务器需要统一时间单位,这与用户所在的地理位置(时区)无关,所以一般使用协调世界时(UTC,Coordinated Universal Time)。

对用户而言,会对 UTC 格式的时间感到困惑,更希望看到本地时间,而且采用当地所惯用的格式。

要想在服务器上只使用 UTC 时间,一个优雅的解决方案是,把时间单位发送给 web 浏览器,转换称当地时间,然后渲染。web 浏览器可以很好地完成这一任务,因为它能获取用户电脑中的时区和区域设置。

moment.js 一个使用 JavaScript 开发的优秀客户端开源代码库,可在浏览器中渲染日期和时间。flask-moment 是一个 flask 程序扩展,能把 moment.js 集成到 Jinja2 模板中。首先,进行 flask-moment 的安装:

pip install flask-moment

1. flask-moment 的初始化方法为:

from flask_moment import Moment moment = Moment(app)

2. 基模板的修改

除了 moment.js,flask-moment 还依赖 jquery.js 。要在 html 文档的某个地方引入这两个库,可以直接引入,这样可以选择使用哪个版本,也可使用扩展提供的辅助函数,从内容分发网络(CDN,Content Delivery Network)中引入通过测试的版本。Bootstrap 已经引入了 jquery.js,因此只需引入 moment.js 即可,

如下代码展示了如何在基模板的 scripts 块中引入这个库:

{% block script %} {{ super() }} {{ moment.include_moment() }} {% endblock %}

3. 时间戳的处理

为了处理时间戳,flask-moment 向模板开放了 moment 类,

from datetime import datetime

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

4. 在模板中渲染 current_time

<p>The local date and time is {{ moment(current_time).format('LLL') }}</p>
<p>That was {{ moment(current_time).fromNow(refresh=True) }}</p>

format(‘LLL’):根据客户端电脑中的时区和区域设置渲染日期和时间,参数决定了渲染的方式,’L’ 到 ‘LLLL’ 分别对应不同的复杂度。

5. 其他

flask-moment 实现了 moment.js 中的 format()、fromNow()、fromTime()、calendar()、valueOf()、unix()方法。具体可查阅文档 http://momentjs.com/docs/

 

问 AI(只依据本文回答)
输入你的问题,AI 只根据当前段落和全篇上下文回答。
本文批注(0)