如何使用Django模板识别顺序列表中的间隙

时间:2016-11-07 19:21:41

标签: django templates

如果我的django模板中有一个有序的顺序列表:

my_list = [
    (1, "Billy Holiday"), 
    (2, "Louis Armstrong"), 
    # Number 3 is missing!
    (4, "Ella Fitzgerald"),
    (5, "Frank Sinatra"),
]

我希望在我的html中显示类似的内容:

1. Billy Holiday
2. Louis Armstrong
-- Some rows may be missing --
4. Ella Fitzgerald
5. Frank Sinatra

有一种聪明的方法吗?我试图使用Django模板来实现这一目标。我们的想法是查看循环的上一次迭代,并根据计数器值确定是否缺少行。

2 个答案:

答案 0 :(得分:0)

也许一种简单的方法就是以这种方式构建列表:

my_list = [
    (1, "Billy Holiday"), 
    (2, "Louis Armstrong"), 
    (3, ""),
    (4, "Ella Fitzgerald"),
    (5, "Frank Sinatra"),
]

并写一个if来处理循环内的空白数据。

答案 1 :(得分:0)

您似乎尝试将某些逻辑从视图移动到模板。我强烈建议不要采用这种方法。它不可测试,难以维护,很可能与DRY原则相冲突。

所以只是在视图中完成工作可能会更好。

但是,如果您完全坚持要在模板中完成此操作,则可以创建自己的模板过滤器:

<强> someapp / templatetags / app_tags.py

from django import template
register = template.Library()

@register.filter
def set_missing_items(collection):
    new_list = []
    last = 0
    for item in collection:
        if item[0] != last + 1:
            new_list.append('-- Some rows may be missing --')
        new_list.append(item)
        last = item[0]
    return new_list

然后按如下方式使用它:

<强> template.html

{% load app_tags %}
{% for item in list|set_missing_items %}
    {{ item }}
{% endif %}

请务必遵循documentation中的所有步骤,以使自定义过滤器正常工作(例如,使用__init__.py文件具有正确的文件夹结构,确保安装了具有这些过滤器的应用程序等)。