2012-09-19 46 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()