2010-10-03 1 views
4

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

Я ищу совет по наилучшему способу реализации многоколоночного отображения моего QuerySet, который заполняет каждый столбец сверху вниз по столбцам X. Это означает, что количество элементов в каждом столбце равно числу QuerySet, деленному на X (количество столбцов).

Использование смещения не работает для этого, потому что я хотел бы, чтобы мои данные вырастали в 4 столбца без обновления смещения вручную. Поплавки CSS работают визуально, но оставляют данные неработоспособными.

ответ

5

Нечто подобное должно работать для вас, передайте число столбцов, columns к шаблону:

{% for item in items %} 
    {% if forloop.first %}<div style="float:left;">{% endif %} 
    {{ item }} 
    {% if forloop.counter|divisibleby:columns %} 
     </div><div style="float:left"> 
    {% endif %} 
    {% if forloop.last %}</div>{% endif %}  
{% endfor %} 
<div style="clear:both;"></div> 
+0

Одна крошечная нота, делящийся на ошибках в коде выше, для тех из нас, кто вырезает и вставляет :) – 2011-02-02 19:15:13

+0

@TechTeacherGirl: Спасибо, я исправил его. Однако есть веская причина, что у нас нет проверки орфографии в IDE. ;) –

+0

Это будет работать, если вместо столбцов вы фактически передадите количество строк в столбце, которые вы можете предварительно просчитать в представлении, разделив общее количество элементов на количество столбцов, как сказал Ким. – rslite

1

Похоже, ответ lazerscience находится на правильном пути, - но я думаю, что ОП хочет, чтобы данные в алфавитном порядке сортировать данные по столбцу, а затем начинать назад в верхней части следующего столбца. Использование divisibleby: работает, чтобы сломать строку после элементов «X», но я думаю, что для выполнения того, что хочет OP, потребуется более сложный шаблон.

Не уверен, если это возможно, но с точки зрения могли бы вы: Получить количество элементов, деление на «колоннах» и используется, что # в Divisibleby пробиться в следующий столбец DIV (визуальный поток будет CSS)

В качестве примера Lazers вы строите строки, а затем разбиваете их на столбцы, оставляя порядок сортировки попеременно, а затем вниз.

Извините, если я что-то пропустил.

+0

. Мой пример сортирует элементы по столбцам, а THEN запускает следующий столбец, он сначала построит строку f, которую вы бы поставили каждый отдельный элемент в свой собственный плавающий div! –

+0

Вижу, вы правы. Но вы все еще определяете, сколько элементов находится в столбце, а не сколько их столбцов. Для использования на экране это не очень полезно, так как список растет от 10 до 200 элементов, количество столбцов становится абсурдным, если вы вручную не обновите divisibleby: #.Вместо этого было бы полезно сказать, что я могу поместить 3 столбца в свой проект, разбил набор данных на три части (1-10, 11-20, 21-30 для списка 30 элементов) и вычислил количество каждого столбца на fly (1/3 из набора запросов) – Kim

0

Вы бы лучше пойти и использовать плагин JQuery, чтобы сделать некоторые столбцы из списка.
Columnizer работает очень хорошо для меня

0

Вот некоторые шаблоны Джанго фильтр, разделить список на несколько подсписков:

list partition template filters at djangosnippets.org

Вы можете использовать их в качестве шаблона Джанго разделить длинный список в несколько столбцов следующим образом:

{% load list_tags %} 
<h2>Some List</h2> 

{% for sub_list in full_list|rows:"3" %} 
<ul> 
    {% for item in sub_list %} 
    <li> 
     {{item.name}} 
    </li> 
    {% endfor %} 
</ul> 
{% endfor %} 

Я включил фильтры шаблонов в свой проект в файле list_tags.py. При необходимости отрегулируйте тег {% load %}.