仅在django模板中显示唯一对象

时间:2012-09-19 19:51:09

标签: python django django-templates django-template-filters

我有一个对象列表。我想以这样的方式显示这些对象:如果后续对象包含相同的日期,则仅显示第一个唯一日期。如果日期不同于应显示的日期。这是一个例子。

数据:

  • 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”

看看自上一个日期以来id 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 个答案:

答案 0 :(得分: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()