Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>To solve use cases like this one, I wrote a small environment filter that counts occurences of a key.</p> <p>Here's de code (with doc test) of myfilters.py:</p> <pre><code>#coding: utf-8 from collections import defaultdict from jinja2 import environmentfilter from jinja2.utils import soft_unicode @environmentfilter def inc_filter(env, key, value=1, result='value', reset=False): """ Count ocurrences of key. Stores the counter on Jinja's environment. &gt;&gt;&gt; class Env: pass &gt;&gt;&gt; env = Env() &gt;&gt;&gt; inc_filter(env, 'x') 1 &gt;&gt;&gt; inc_filter(env, 'x') 2 &gt;&gt;&gt; inc_filter(env, 'y') 1 &gt;&gt;&gt; inc_filter(env, 'x') 3 &gt;&gt;&gt; inc_filter(env, 'x', reset=True) 1 &gt;&gt;&gt; inc_filter(env, 'x') 2 &gt;&gt;&gt; inc_filter(env, 'x', value=0, reset=True) 0 &gt;&gt;&gt; inc_filter(env, 'x', result=None) &gt;&gt;&gt; inc_filter(env, 'x', result=False) u'' &gt;&gt;&gt; inc_filter(env, 'x', result='key') 'x' &gt;&gt;&gt; inc_filter(env, 'x') 4 """ if not hasattr(env, 'counters'): env.counters = defaultdict(int) if reset: env.counters[key] = 0 env.counters[key] += value if result == 'key': return key elif result == 'value': return env.counters[key] elif result == None: return None else: return soft_unicode('') ## Module doctest if __name__ == '__main__': import doctest doctest.testmod() </code></pre> <p>Setup your environment registering our custom filter:</p> <pre><code>#coding: utf-8 from jinja2 import Environment, FileSystemLoader from myfilters import inc_filter env = Environment(loader=loader=FileSystemLoader('path')) env.filters['inc'] = inc_filter t = env.get_template('yourtemplate.txt') items = [ ['foo', 'bar'], ['bax', 'quux', 'ketchup', 'mustard'], ['bacon', 'eggs'], ] res = t.render(items=items) </code></pre> <p>And on your template, use it like this:</p> <pre><code>{% for group in items -%} {% for item in group -%} item={{ item }}, count={{ 'an_identifier'|inc }} {% endfor -%} {% endfor -%} </code></pre> <p>...which prints:</p> <pre><code>item=foo, count=0 item=bar, count=1 item=bax, count=2 item=quux, count=3 item=ketchup, count=4 item=mustard, count=5 item=bacon, count=6 item=eggs, count=7 </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload