2016-11-07 76 views
2

如果我在我的Django模板的有序順序表:如何識別使用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

您將需要使用的Jinja2,而不是Django模板或做它在視圖 – e4c5

回答

0

也許一個簡單的方法將生成列表是這樣的:

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

譜寫如果採取循環內照顧空白數據。

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文件正確的文件夾結構,確保已安裝了這些過濾器的應用程序,等等)。