【问题标题】:How to use python module timeago with flask?如何将 python 模块 timeago 与烧瓶一起使用?
【发布时间】:2020-02-11 05:09:01
【问题描述】:

我正在尝试在我的烧瓶应用程序中使用 python timeago 模块将日期时间转换为“前一段时间”。我正在寻找在从我的模型中获取结果或在模板中处理时转换日期的解决方案......

我在google上做了一些研究,但没有找到任何与flask相关的有用案例......

示例代码

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...

也想过在 Model 类中使用 init 方法,但与实现混淆了......

请指教

【问题讨论】:

    标签: python flask jinja2 flask-sqlalchemy


    【解决方案1】:

    您可以轻松地为您的 jinja 模板创建过滤功能

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

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

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

    【讨论】:

      【解决方案2】:

      文档显示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。代码的 sn-p 可以在here找到。

      【讨论】:

      • 如果是一张唱片,我本可以做到的。如果您看到我的模型,它会返回批量记录...
      • 似乎 Flask-Moment 可以解决我的问题。感谢您的回复....
      【解决方案3】:

      有一个可用的烧瓶模块 -> Flask-Humanize。

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-02
        • 2019-01-30
        • 2019-11-24
        • 2020-11-15
        相关资源
        最近更新 更多