如何将python模块timeago与flask一起使用?

2024-05-20 15:45:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在我的flask应用程序中使用python timeago模块将datetime转换为“一段时间以前”。我正在寻找解决方案,转换日期,同时从我的模型或在模板中处理结果

我在谷歌做了一些研究,但没有发现任何与烧瓶相关的有用案例

示例代码

class SampleModel(db.Model):
    __tablename__ = "sample_table"
    id = db.Column(db.BigInteger, primary_key=True)
    name =db.Column(db.String(100),nullable=False)
    location=db.Column(db.String(100),nullable=False)
    arrival_date = db.Column(db.DateTime, nullable=False)

    @classmethod
    def find_by_id(cls, id:int):
        return cls.query.filter_by(id=id).order_by(cls.arrival_date.desc()).all()

烧瓶模板

<div>
{% for row in page_data %}
     .
     .
     .
     <td>{{ row["arrival_date"]  }}</td>
     .
{% endfor %}
</div>

在向表中插入数据时,它应该使用实际的时间戳,但在打印到模板中时,它应该使用timeago

也曾考虑在模型类中使用init方法,但与实现混淆

请指教


Tags: 模型div模板idfalsedbdatestring
3条回答

您可以轻松地为jinja模板创建筛选函数

    @app.template_filter('timeago')
    def fromnow(date):
        return timeago.format(date, datetime.datetime.now())

在模板中,您可以这样使用它:

<div>
    {{some_date|timeago}}
</div>

该文档显示了可包含在路由中的this,并将其与渲染模板一起传递:

import timeago, datetime

now = your date
date = datetime.datetime.now() 

print (timeago.format(date, now)) # will print 3 minutes ago

但在您的情况下,您需要在html本身中使用它: 在这种情况下,我建议将Flask Moment与Moment.js一起使用。代码片段可以在here中找到

有一个烧瓶模块可用->;使之人性化

https://github.com/vitalk/flask-humanize

本模块将帮助您将大量资料转换为人类可读的格式,还支持多种语言

这是我们在应用程序中初始化的方式。

from flask import Flask
from flask_humanize import Humanize

app = Flask(__name__)
humanize = Humanize(app)

@humanize.localeselector
def get_locale():
    return 'ru_RU'

这是我们在模板中使用它的方式

{{ datetime.datetime.now()|humanize('naturalday') }} -> today
{{ datetime.date(2014,4,21)|humanize('naturaldate') }} -> Apr 21 2014
{{ (datetime.datetime.now() - datetime.timedelta(hours=1))|humanize() }} -> an hour ago

相关问题 更多 >