本文主要是介绍Flask扩展: Flask-Moment,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Flask-Moment 本地化日期和时间
简介
如果 Web 程序的用户来自世界各地,那么处理日期和时间可不是一个简单的任务。
服务器需要统一时间单位,这和用户所在的地理位置无关,所以一般使用协调世界时(Coordinated Universal Time,UTC)。不过用户看到UTC格式的时间会感到困惑,他们更希望看到当地时间,而且采用当地惯用的格式。
要想在服务器上只使用 UTC 时间,一个优雅的解决方案是,把时间单位发送给Web 浏览器,转换成当地时间,然后渲染。Web 浏览器可以更好地完成这一任务,因为它能获取用户电脑中的时区和区域设置。
有一个使用 JavaScript
开发的优秀客户端开源代码库,名为 moment.js
,它可以在浏览器中渲染日期和时间。Flask-Moment
是一个 Flask
程序扩展,能把 moment.js
集成到 Jinja2
模板中。
安装
使用 pip
安装
$ pip install flask-moment
使用
示例1 hello.py
: 初始化 Flask-Moment
from flask_moment import Moment
moment = Moment(app)
除了 moment.js
,Flask-Moment
还依赖 jquery.js
。要在HTML 文档的某个地方引入这两个库,可以直接引入,这样可以选择使用哪个版本,也可使用扩展提供的辅助函数,从内容分发网络(Content Delivery Network,CDN)中引入通过测试的版本。Bootstrap
已经引入了 jquery.js
,因此只需引入 moment.js
即可。示例2 展示了如何在基模板的 scripts
块中引入这个库。
示例2 templates/base.html
:引入 moment.js
库
{% block scripts %}
{{ super() }}
{{ moment.include_moment() }}
{% endblock %}
为了处理时间戳,Flask-Moment
向模板开放了 moment
类。示例3 中的代码把变量 current_time
传入模板进行渲染。
示例3 hello.py
:加入一个 datetime
变量
from datetime import datetime
@app.route('/')
def index():return render_template('index.html',current_time=datetime.utcnow())
示例4 展示了如何在模板中渲染 current_time
。
示例4 templates/index.html
:使用 Flask-Moment
渲染时间戳
<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'
分别对应不同的复杂度。format()
函数还可接受自定义的格式说明符。
第二行中的 fromNow()
渲染相对时间戳,而且会随着时间的推移自动刷新显示的时间。这个时间戳最开始显示为 “a few seconds ago”
,但指定 refresh
参数后,其内容会随着时间的推移而更新。如果一直待在这个页面,几分钟后,会看到显示的文本变成 “a minute ago” “2 minutes ago”
等。
Flask-Moment
实现了 moment.js
中的 format()
、fromNow()
、fromTime()
、calendar()
、valueOf()
和 unix()
方法。更多的 moment.js
格式化选项可以查看 http://momentjs.com/docs/#/displaying/
Flask-Moment
渲染的时间戳可实现多种语言的本地化。语言可在模板中选择,把语言代码传给 lang()
函数即可:
{{ moment.lang('es') }}
这篇关于Flask扩展: Flask-Moment的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!