V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Tornado Documentation
http://www.v2ex.com/tornado/
Tornado on GitHub
https://github.com/facebook/tornado/
Tornado Gists
http://tornadogists.org/
kenneth
V2EX  ›  Tornado

Jinja2中如何实现这个帖子多久前发布的?

  •  
  •   kenneth · 2012-12-18 18:09:22 +08:00 · 6432 次点击
    这是一个创建于 4140 天前的主题,其中的信息可能已经有所发展或是发生改变。
    @livid
    1.如何实现像v2ex这样,记录的是一个DateTime()的时间,如何得到3天前发布, 2小时前发布这样的。
    2.如何实现nl2br()这样的,因为直接显示数据库的数据换行处理的好像不好。
    18 条回复    1970-01-01 08:00:00 +08:00
    Brutal
        2
    Brutal  
       2012-12-18 18:23:25 +08:00
    unixtools
        3
    unixtools  
       2012-12-18 19:14:18 +08:00
    kenneth
        4
    kenneth  
    OP
       2012-12-18 19:44:06 +08:00
    @Brutal 能否详细说下,因为思路有了,具体怎么搞还是不懂。
    ergatea
        5
    ergatea  
       2012-12-18 22:31:35 +08:00
    @kenneth unixtools同学给的例子非常清楚了。
    kenneth
        6
    kenneth  
    OP
       2012-12-18 22:37:26 +08:00
    @ergatea
    @unixtools
    @Brutal

    我在模板中想用{{locale.formate(comment.created_at)}}为什么不行?
    ipconfiger
        7
    ipconfiger  
       2012-12-18 22:37:29 +08:00
    写个filter
    kenneth
        8
    kenneth  
    OP
       2012-12-18 22:38:17 +08:00
    @livid 能否给个解答?
    Brutal
        9
    Brutal  
       2012-12-18 23:06:19 +08:00
    @kenneth 要是要在 jinja2 中实现,将给你的代码写成 filter ,然后
    {{comment.created_at | timesince }} 就可以了
    kenneth
        10
    kenneth  
    OP
       2012-12-18 23:13:34 +08:00
    @Brutal 在tornado中如何写?Flask和Tornado不通用吧。
    Brutal
        11
    Brutal  
       2012-12-18 23:17:10 +08:00
    @kenneth 没研究过 tornado 和 jinja2 整合,
    那你就把那个单独弄成函数 timesince(t) 然后传变量 timesince(comment.created_at)
    kenneth
        12
    kenneth  
    OP
       2012-12-18 23:36:21 +08:00
    我现在用的是{{locale.format_date(comment.created_at)}}
    可是只能出现 December 18, 2012 at 11:31 pm
    这个是绝对时间,并不是相对时间。
    Rabbit52
        13
    Rabbit52  
       2012-12-18 23:44:45 +08:00
    我是用时间戳之差判断的,多少以内返回秒,然后返回分钟,往后推到最后直接返回具体时间
    SErHo
        14
    SErHo  
       2012-12-18 23:54:30 +08:00
    http://timeago.yarp.com/ 试试这个?
    kenneth
        15
    kenneth  
    OP
       2012-12-19 00:03:02 +08:00
    @Brutal @Rabbit52 @unixtools @ergatea @ipconfiger @SErHo @livid
    应该用的不是这个方法吧。我看文档
    format_date(date, gmt_offset=0, relative=True, shorter=False, full_format=False)
    By default, we return a relative time (e.g., “2 minutes ago”). You can return an absolute date string with relative=False.

    默认应该返回,起码也应该是2 minutes ago这种,为什么我的显示是 December 18, 2012 at 11:29 pm
    也就是绝对时间,而不是相对时间呢?不知道错哪里了?
    killall
        16
    killall  
       2012-12-19 00:04:34 +08:00
    http://jinja.pocoo.org/docs/api/#custom-filters

    写一个filter, 将你的时间作为参数放到自己写的filter里面计算将结果进行返回
    filter里面就是将时间跟当前时间比对,计算出来多少天就可以了。
    貌似jq也有直接渲染的插件。
    kenneth
        17
    kenneth  
    OP
       2012-12-19 11:43:26 +08:00
    今天一早醒来,竟然变了 4 hours ago
    Livid
        18
    Livid  
    MOD
       2012-12-19 17:48:57 +08:00
    数据库里存 unix timestamp,然后在显示的时候,用当前的 unix timestamp 减去之前存的,然后差值就是中间经过的秒数。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1528 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 17:01 · PVG 01:01 · LAX 10:01 · JFK 13:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.