如果我的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模板来实现这一目标。我们的想法是查看循环的上一次迭代,并根据计数器值确定是否缺少行。
答案 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文件具有正确的文件夹结构,确保安装了具有这些过滤器的应用程序等)。