Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Django模板识别顺序列表中的间隙_Django_Templates - Fatal编程技术网

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

如何使用Django模板识别顺序列表中的间隙,django,templates,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

如果我的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模板来实现这一点。我们的想法是查看循环的上一次迭代,并根据计数器值确定是否缺少行。

也许一个简单的方法是这样构建列表:

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

并写一个IF来处理循环中的空白数据。

< P>也许一个简单的方法是用这种方式构建列表:

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

并写一个IF来处理循环中的空白数据。

看起来好像你试图把一些逻辑从视图移到模板。我强烈反对这种做法。它是不可测试的,更难维护,很可能会与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 %}

确保按照中的所有步骤操作,以使自定义筛选器正常工作(例如,使用uu init uuu.py文件具有适当的文件夹结构,确保安装了具有这些筛选器的应用程序等)。

您似乎试图将一些逻辑从视图移动到模板。我强烈反对这种做法。它是不可测试的,更难维护,很可能会与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 %}

确保按照中的所有步骤操作,以使自定义筛选器正常工作(例如,使用_init__u;.py文件具有适当的文件夹结构,确保安装了具有这些筛选器的应用程序,等等).

您需要使用jinja2而不是django模板,或者在视图中执行此操作。您需要使用jinja2而不是django模板,或者在视图中执行此操作