Rahul ghrix
Rahul ghrix

Reputation: 41

issue with printing the elements of an array in django?

I have an array which prints the list of some elements. I want to print those elements in a group of say '4'. That is if our array has 10 elements. Then in my template first <div> shows first 4 elements and next <div> shows next 4 elements. and so on.

I have tried to print like as we prints in PHP but it does not work here so please suggest me some way to do that.

There are 9 products in c.list and i want to show them as i have mentioned above:

{% if c.list|length >= 1 or c.list|length < 5 %}
        {% for p in c.list %}

        <div class="dis_box1">

        <div class="item_imagebox_01"><a href="/shop/product/{{p.title}}"><img style ="width:145px;height:190px;"alt="" src="{{ MEDIA_URL }}{{p.image}}"></a>
        <div class="img_line1"></div>
        </div>

        <div class="left"><span class="heart_text1"><a href="/shop/product/jhgjgj/">{{p.title}}</a></span></div>

            </div> 

        {% endfor %}
{% endif %}

Upvotes: 0

Views: 262

Answers (1)

Ted
Ted

Reputation: 12318

This is the kind of work you should really be doing in your view.

In your view:

list_by_fours = []
list_len = len(c.list)
last_point = 0
next_point = 4

while last_point < list_len:
  if next_point > list_len:
    next_point = list_len
  list_by_fours.append(c.list[last_point:next_point])
  last_point += 4
  next_point += 4

#Make sure you add list_by_fours to the template context

Then in your template:

{% for bucket in list_by_fours %}
        {% for p in bucket %}
             ...
        {% endfor %}
{% endif %}

I'm sure there's a way to do this with itertools or some other fancy trick, but this is clean and easy to understand for beginners.

Upvotes: 2

Related Questions