首页 文章

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

提问于
浏览
1

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

数据:

  • 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 回答

  • 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()
    

相关问题