2011-05-31 14 views
6

Sé que hay timesince filtro.Django crear filtro de plantilla por buen tiempo

Pero quiero algo que devuelve la siguiente: Hace

  • apenas pocos segundos
  • X minutos hace hace
  • X horas
  • en $ day_name
  • hace
  • X semanas
  • X Hace meses

Ejemplos:

  • apenas pocos segundos atrás hace
  • 37 minutos
  • hace
  • hace
  • ayer
  • el jueves
  • 1 2 horas semana
  • hace 7 meses

Cómo ¿Puedo implementar algo como esto?

Respuesta

14

No estoy seguro si cumple todos sus cuadros, pero no hay una etiqueta naturaltime en las etiquetas de plantilla django.contrib.humanize que debe hacer esto:

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

settings.py

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

template.html

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

Genial, no sabía nada de esto. Esto fue agregado después de Django 1.3; Tendrás que obtenerlo del tronco SVN. –

+0

Impresionante, me gusta más Django;) – starcorn

4

Editar: Si está utilizando un checkout SVN reciente de Django (post 1.3), vea la respuesta de Pastylegs. De lo contrario, esto es lo que puede hacer:

Uso repoze.timeago para este fin. El código es bastante sencillo, así que puedes personalizarlo si es necesario.

Aquí hay un filtro personalizado de Django llamado elapsed que creé que usa 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 
Cuestiones relacionadas