2012-09-19 48 views
1

我有一个对象列表。我希望以这种方式显示这些对象,以便只有在后续对象包含相同日期时才显示第一个唯一日期。如果日期与应显示的日期不同。这是一个例子。仅在Django模板中显示唯一对象

数据:

  • ID:2,日期: “01/01/2010”
  • ID:3,日期: “01/01/2010”
  • ID:4,日期: “02/02/2010”

我想显示什么:

  • ID - 2, “01/01/2010”
  • ID - 3,
  • ID - 4, “02/02/2010”

参见同上3如何说明不了什么,因为以前的日期是一样的吗?

如何使用django模板做到这一点?我尝试过的一件事是创建一个自定义过滤器。唯一的问题是它使用一个全局变量,在我看来这是一个不可能的事情。我如何在函数过滤器或django模板语言中维护状态以表示以前的值?

__author__ = 'Dave' 
#This works but isn't best practice 
from django import template 
register = template.Library() 

a = '' 
@register.filter() 
def ensure_unique(value): 
    global a 
    if a == value: 
     return '' 
    else: 
     a = value 
     return value 

回答

1

使用simple_tag使人们更容易对我来说,保存状态和实现正是我需要的。

from django import template 
register = template.Library() 

@register.simple_tag(takes_context=True) 
def stop_repeat(context, event): 
    """ 
    Finds various types of links embedded in feed text and creates links out of them. 
    """ 
    if event.date: 
     if (event.get_date_time_location(), event.id) in context: 
      return '' 
     else: 
      context[(event.get_date_time_location(), event.id)] = (event.get_date_time_location(), event.id) 
      return event.get_date_time_location()