Flask教程:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xiii-dates-and-times

SOURCE

这章讲解格式化时间。

思路: 服务器中存储的日期时间都是UTC的,对于不同的用户,使用javascript格式UTC时间显示给客户。

这里比较有意思的是:

  1. 使用了momentjs这个API。
  2. 使用python包了下momentjs函数,给模版引擎Jinja2调用。

使用momentjs

  1. momentjs下载moment.min.js,放到app/static/js/文件夹中。
  2. 在app/templates/base.html引用

     <script src="/static/js/moment.min.js"></script>
    

用pyhton包momentjs

新建文件:app/momentjs.py

    
    from jinja2 import Markup
    
    class momentjs(object):
        def __init__(self, timestamp):
            self.timestamp = timestamp
    
        def render(self, format):
            return Markup("<script>\ndocument.write(moment(\"%s\").%s);\n</script>" % (self.timestamp.strftime("%Y-%m-%dT%H:%M:%S Z"), format))
    
        def format(self, fmt):
            return self.render("format(\"%s\")" % fmt)
    
        def calendar(self):
            return self.render("calendar()")
    
        def fromNow(self):
            return self.render("fromNow()")
    
    

把把的函数设置给模版引擎Jinja2

app/__init__.py

    
    from .momentjs import momentjs
    app.jinja_env.globals['momentjs'] = momentjs
    
    

在显示日期时间的地方使用上面的函数

app/templates/user.html

    
    {% if user.last_seen %}
    <p><em>Last seen: {{ momentjs(user.last_seen).calendar() }}</em></p>
    {% endif %}
    
    

app/templates/post.html

    
    <p><a href="{{ url_for('user', nickname=post.author.nickname)}}">{{ post.author.nickname }}</a> said {{ momentjs(post.timestamp).fromNow() }}:</p>
    <p><strong>{{ post.body }}</strong></p>