【问题标题】:Django create template filter for nice timeDjango为美好时光创建模板过滤器
【发布时间】:2011-09-05 21:06:52
【问题描述】:

我知道有timesince 过滤器。

但我想要返回这个的东西:

  • 就在几秒钟前
  • X 分钟前
  • X 小时前
  • 在$day_name
  • X 周前
  • X 个月前

例子:

  • 就在几秒钟前
  • 37 分钟前
  • 2 小时前
  • 昨天
  • 星期四
  • 1 周前
  • 7 个月前

我怎样才能实现这样的东西?

【问题讨论】:

    标签: python django django-template-filters


    【解决方案1】:

    不确定它是否符合您的所有要求,但 django.contrib.humanize 模板标签中有一个标签 naturaltime 应该这样做:

    https://docs.djangoproject.com/en/dev/ref/contrib/humanize/#naturaltime

    settings.py

    INSTALLED_APPS = {
        ...
        'django.contrib.humanize',
    }
    

    template.html

    {% load humanize %}
    {{ model.timefield|naturaltime }}
    

    【讨论】:

    • 酷,我不知道这个。这是在 Django 1.3 之后添加的;您必须从 SVN 主干获取它。
    • 太棒了,我越来越喜欢 Django 了;)
    【解决方案2】:

    编辑:如果您使用最近的 Django SVN 结帐(1.3 后),请参阅 Pastylegs 的答案。否则,您可以执行以下操作:

    我为此使用repoze.timeago。代码相当简单,因此您可以根据需要对其进行自定义。

    这是我创建的一个名为 elapsed 的 Django 自定义过滤器,它使用 repoze.timeago。

    import datetime
    from django import template
    import repoze.timeago
    
    register = template.Library()
    
    # If you aren't using UTC time everywhere, this line can be used
    # to customize repoze.timeago:
    repoze.timeago._NOW = datetime.datetime.now
    
    @register.filter(name='elapsed')
    def elapsed(timestamp):
        """
        This filter accepts a datetime and computes an elapsed time from "now".
        The elapsed time is displayed as a "humanized" string.
        Examples:
            1 minute ago
            5 minutes ago
            1 hour ago
            10 hours ago
            1 day ago
            7 days ago
    
        """
        return repoze.timeago.get_elapsed(timestamp)
    elapsed.is_safe = True
    

    【讨论】:

      猜你喜欢
      • 2012-08-18
      • 2012-06-03
      • 1970-01-01
      • 2011-04-12
      • 1970-01-01
      • 1970-01-01
      • 2020-06-19
      • 1970-01-01
      • 2019-01-01
      相关资源
      最近更新 更多