1

在用Flask-Moment扩展模块之前先看下宏,宏类似于Python代码中的函数。例如:

{% macro render_comment(comment) %} 
    <li>{{ comment }}</li>
{% endmacro %} 
<ul>
    {% for comment in comments %} 
            {{ render_comment(comment) }} 
    {% endfor %}
</ul>

为了重复使用宏,我们可以将其保存在单独的文件中,然后在需要使用的模板中导入:

{% import 'macros.html' as macros %}
<ul> 
    {% for comment in comments %}
        {{ macros.render_comment(comment) }} 
    {% endfor %} 
</ul> 

Flask-Moment依赖

Moment.js 是一个简单易用的轻量级JavaScript日期处理类库,提供了日期格式化、日期解析等功能。它支持在浏览器和NodeJS两种环境中运行。此类库能够 将给定的任意日期转换成多种不同的格式,具有强大的日期计算功能,同时也内置了能显示多样的日期形式的函数。另外,它也支持多种语言,你可以任意新增一种 新的语言包。

Flask-Moment是一个集成moment.js到Jinja2模板的Flask扩展。

Flask-Moment依赖moment.js和jquery.js。需要直接包含在HTML文档;如果使用了bootstrap,可以不用导入jquery.js,因为bootstrap中包含了jquery.js

初始化并传入一个时间戳

Flask-Moment初始化后相当于模版中多了几个处理时间的宏,我们可以传过去一个时间戳,在模版中进行转换处理

# -*- coding:utf-8
from flask import Flask, render_template
from flask.ext.script import Manager, Server
from flask.ext.moment import Moment
from datetime import datetime
#from flask.ext.bootstrap import Bootstrap
app = Flask(__name__)
manager = Manager(app)
#初始化
moment = Moment(app)
#bootstrap = Bootstrap(app)
manager.add_command("runserver", Server(use_debugger=True))
@app.route('/')
def index():
    #传一个时间戳,可以是datetime.utcnow()也可以是 date(1995,11,20)
    return render_template('index.html', time=datetime.utcnow())
if __name__ == '__main__':
    manager.run()

模板处理

<html>
    <head>
            <!--如果使用了bootstrap,可以不用导入jquery.js,因为bootstrap中包含jquery.js-->
            <!--导入jq和moment.js-->
           {{ moment.include_jquery() }}
           {{ moment.include_moment() }}
            <!--使用中文,默认是英语的-->
         {{ moment.lang("zh-CN") }} 
    </head>
    <body>
        <p>后台传来的时间戳的时间: {{ moment(time).format('LLL') }}.</p>
        <p>后台传来的时间戳的时间: {{ moment(time).format('LL') }}.</p>
        <p>后台传来的时间戳的时间: {{ moment(time).format('L') }}.</p>
        <p>带有上下午:{{ moment().calendar() }}.</p>
        <p>后台传来的时间戳距离现在且自动更新: {{ moment(time).fromNow(refresh=True) }}</p>
        <p>已经过去了,没有自动更新: {{ moment().fromTime(time) }}.</p>
        <p>现在时间是: {{ moment().format('YYYY年M月D日, h:mm:ss a') }}.</p>
<!--    在moment()中如果不传入python的时间变量,则默认将utc时间转换成本地时间作为显示,传入local=True参数可以关闭转换.-->
    </body>
</html>

最终效果

http://localhost:5000/

后台传来的时间戳的时间: 2017年8月11日早上8点55分.

后台传来的时间戳的时间: 2017年8月11日.

后台传来的时间戳的时间: 2017-08-11.

带有上下午:今天早上8点55分.

后台传来的时间戳距离现在且自动更新: 26 分钟前

已经过去了,没有自动更新: 几秒前.

现在时间是: 2017年8月11日, 8:55:08 早上.

参考链接:Flask学习记录之Flask-Moment


Big_fat_cat
207 声望10 粉丝

引用和评论

0 条评论