Numeric for loop in Django templates

后端 未结 19 855
温柔的废话
温柔的废话 2020-11-22 03:29

How do I write a numeric for loop in a Django template? I mean something like

for i = 1 to n
相关标签:
19条回答
  • 2020-11-22 04:14

    You should use "slice" in template, a example like this:

    in views.py

    contexts = {
        'ALL_STORES': Store.objects.all(),
    }
    
    return render_to_response('store_list.html', contexts, RequestContext(request, processors=[custom_processor]))
    

    in store_list.html:

    <ul>
    {% for store in ALL_STORES|slice:":10" %}
        <li class="store_item">{{ store.name }}</li>
    {% endfor %}
    </ul>
    
    0 讨论(0)
  • 2020-11-22 04:15
    {% with ''|center:n as range %}
    {% for _ in range %}
        {{ forloop.counter }}
    {% endfor %}
    {% endwith %}
    
    0 讨论(0)
  • 2020-11-22 04:15

    My take on this issue, i think is the nicest. I keep a my_filters.py on the templatetags directory.

    @register.filter(name='times') 
    def times(number):
        return range(number)
    

    And you would use like this:

    {% load my_filters %}
    {% for i in 15|times %}
        <li>Item</li>
    {% endfor %}
    
    0 讨论(0)
  • 2020-11-22 04:15

    This method supports all the functionality of the standard range([start,] stop[, step]) function

    <app>/templatetags/range.py

    from django import template
    
    register = template.Library()
    
    
    @register.filter(name='range')
    def _range(_min, args=None):
        _max, _step = None, None
        if args:
            if not isinstance(args, int):
                _max, _step = map(int, args.split(','))
            else:
                _max = args
        args = filter(None, (_min, _max, _step))
        return range(*args)
    

    Usage:

    {% load range %}
    
    <p>stop 5
    {% for value in 5|range %}
    {{ value }}
    {% endfor %}
    </p>
    
    <p>start 5 stop 10
    {% for value in 5|range:10 %}
    {{ value }}
    {% endfor %}
    </p>
    
    <p>start 5 stop 10 step 2
    {% for value in 5|range:"10,2" %}
    {{ value }}
    {% endfor %}
    </p>
    

    Output

    <p>stop 5
    0 1 2 3 4
    </p>
    
    <p>start 5 stop 10
    5 6 7 8 9
    </p>
    
    <p>start 5 stop 10 step 2
    5 7 9
    </p>
    
    0 讨论(0)
  • 2020-11-22 04:20

    If the number is coming from a model, I found this to be a nice patch to the model:

    def iterableQuantity(self):
        return range(self.quantity)
    
    0 讨论(0)
  • 2020-11-22 04:21

    This shows 1 to 20 numbers:

    {% for i in "x"|rjust:"20"|make_list %}
     {{ forloop.counter }}
    {% endfor %}
    

    also this can help you: (count_all_slider_objects come from views)

    {% for i in "x"|rjust:count_all_slider_objects %}
      {{ forloop.counter }}
    {% endfor %}
    

    or

      {% with counter=count_all_slider_objects %}
        {% if list_all_slider_objects %}
          {%  for slide in list_all_slider_objects %}
            {{forloop.counter|add:"-1"}}
            {% endfor%}
          {% endif %}
        {% endwith %}
    
    0 讨论(0)
提交回复
热议问题