Вопрос по templates, tags, twitter-bootstrap, django – шаблон django для заполнения строк и столбцов начальной загрузки

6

Так вот'моя проблема: яУ нас есть несколько экземпляров класса. Я хотел бы иметь своего рода таблицу этих объектов экземпляра, чтобы в каждой строке было максимум шесть. В терминах начальной загрузки я хотел бы, чтобы каждый объект был представлен миниатюрой вДИВ» класса "Span2" .

Первоначально я хотел использовать вложенный цикл for, но у меня возникли проблемы с манипулированием моей индексной переменной в шаблоне, и я могу 'не могу понять, как это сделать за пределами моего шаблона.

Вот, в общем, что такое шаблон / псевдокод Python / django: «Я пытаюсь понять.

queryset = Class.objects.all()
set_length = queryset.count()

num_rows = set_length/6 
#because I want 6 columns in each row, each with one instance

set_as_list = list(queryset) 
# have a list so I can iterate through objects by index

for i in range(table_rows):
    # make a row
    
    for j in range (i*6,(i+1)*6):
        #make six or less columns
        
           <p>set_as_list[j].attribute1</p>
           <p>set_as_list[j].attribute2</p>
        
     # end row

Я надеюсь, что это вопиющее смешение языка шаблонов django, python и html неникого не обижай слишком сильно. просто пытаюсь выразить идею того, что яЯ пытаюсь сделать. Буду признателен за любую помощь, которую кто-то может предложить, потому что яМы боролись с этим в течение нескольких дней и довольно долго искали решение как внутри шаблона, так и за его пределами.

Я также понимаю, что после целочисленного деления должна быть последняя строка с остатком объектов.

Ваш Ответ

3   ответа
1

Вы могли бы сделать код немного более общим. Вот'С логикой:

queryset = Class.objects.all()
set_length = queryset.count()


{% for i in queryset %}
    
        <p>i.attr</p>
        <p>i.attr</p>
    
    {% if forloop.counter|divisibleby:"6" or forloop.last %}
         
    {% endif %}
{% endfor %}

Я надеюсь, что это решит вашу проблему :-)

Арпит, спасибо за ответ! Единственная проблема заключается в том, что этот код делает только одну строку, насколько я могу судить. Как бы вы адаптировали этот код, чтобы сделать столько строк, сколько нужно? sinwav
На самом деле, я думаю, что это может быть дубликатом. Я думаю, что этот пост имеет решение:stackoverflow.com/questions/16450124/... sinwav
Почти там попробуйте {% if forloop.counter | divisibleby: "6" или forloop.first%} <div class = "Строка ">{% endif%} в начале цикла for. Atherion
Ой, прости, я забыл эту часть .. Рад, что вы нашли решение .. Arpit
Да, подтвердил. Приведенная выше ссылка решает проблему. Он использует вспомогательную функцию, так что мы можем перебирать куски по шесть в каждой строке. sinwav
3

Поскольку forloop.counter начинает индекс с 1, делится на 3 не работает. Так что используйте вместо forloop.counter0.


{% for product in all_products %}
    {% if forloop.counter0|divisibleby:3 %}
        <br>
    {% endif %}
        
{% endfor %}
36

Нет времени объяснять, но яУ меня была похожая проблема, и пока я не закрыл эту страницу браузера, вот решение

{% for sub_article in articles %}
    {% if forloop.first %}{% endif %}
    
            <a href="#">
                {{ sub_article.name }}
            </a>
        
    {% if forloop.counter|divisibleby:3 %}{% endif %}
    {% if forloop.last %}{% endif %}
{% endfor %}
Любое решение для изменения размера столбца? Например, если вы переходите от col-md-4 к col-sm-6, он должен быть в строках, кратных 2, при изменении размера экрана. Aidan Doherty
Это'Это отличный ответ, но как реализовать его, когда у вас разное количество столбцов из-за разного размера устройства? отделочные метки. Tzvi Gregory Kaidanov
После поиска лучшего решения, которое я мог найти для моего предыдущего комментария, используется класс начальной загрузки .clearfix Aidan Doherty
@TzviGregoryKaidanov В этом случае разделите на LCM общего количества столбцов. Например,col-md-4 показывает 3 столбца в строке,col-sm-6 показывает 2 столбца в строке иcol-xs-12 показывает 1 столбец на строку, LCM 3, 2 и 1 равен 6. Так что используйтеdivisibleby:6, Точно так же, если у вас былоcol-md-3 (4 столбца подряд) иcol-sm-6 (2 столбца подряд), вы 'буду использоватьdivisibleby:4 потому что LCM 4 и 2 - 4. (Я знаю, что этот комментарий опоздал на три года, но я добавил это для кого-то еще, ищущего ответ). xyres

Похожие вопросы