2015-08-06 2 views
1

У меня есть шаблон Django, где я пытаюсь отобразить список как неупорядоченный список в html. В настоящее время я это делал это в довольно беспорядочной манере, используя |length и |slice:Django шаблон truncate список, чтобы показать первые n элементов

{% if list_tasks %} 
    The following tasks will be removed from this group: 
    <ul> 
    {% for task in list_tasks|slice:":10" %} 
    <li>{{ task.name }}</li> 
    {% endfor %} 
    {% if list_tasks|length > 10 %} 
     <li>...and {{ list_tasks|length|add:"-10" }} other tasks</li> 
    {% endif %} 
    </ul> 
{% endif %} 

Если list_tasks имеет 253 элементов, выход что-то вроде этого:

The following tasks will be removed from this group: 
    - T06/081 
    - T15/0395 
    - T15/0545 
    - T11/723 
    - T13/758 
    - T14/1532 
    - T14/1512 
    - T14/1510 
    - T04/154 
    - T14/1528 
    - ...and 243 other tasks 

Есть аккуратнее и чище способ сделать это?

ответ

1

Я бы сказал, что ваше решение не все так плохо :)

1. Но некоторые, вероятно, упомянуть, что вы бы лучше форматирования усеченный список в окне, если это все, что требует больше, чем самые основные операции форматирования в шаблоне.

Похоже, что вы показываете эту последнюю строку «... других задач» так же, как и остальные текущие задачи, поэтому это был бы самый чистый метод.

Нечто подобное с вашей точки зрения, то доступ к truncated_tasks в шаблоне:

truncate_to = 10 
truncated_tasks = tasks[:truncate_to] 
if len(tasks) > truncate_to: 
    truncated_tasks.append('...and %s other task(s)' % (len(tasks)-truncate_to)) 

2. Хотя, в зависимости от аудитории, я бы предпочел, чтобы просто толкая весь список шаблона и используя js snippet/plugin, чтобы скрыть/показать другие записи на случай, если кто-то захочет просмотреть/скопировать-вставить полный список :)

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