1

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

数据:

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

我要显示的内容:

  • id - 2,“2010 年 1 月 1 日”
  • 编号 - 3,
  • id - 4,“2010 年 2 月 2 日”

看看 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
4

1 回答 1

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()
于 2012-09-19T22:51:24.603 回答