2016-11-07 2 views
2

Если у меня есть упорядоченный последовательный список в моем шаблоне Джанго:Как определить пробелы в последовательном списке, используя 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, убедитесь, что установлено приложение, в котором установлены эти фильтры и т. Д.).

Смежные вопросы