Plural templatetags if quantity > 1: return single else return plural

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# -*- coding: utf-8 -*-

"""
Usage: {% plural quantity name_singular name_plural %}

This simple version only works with template variable since we will use blocktrans for strings.
"""

from django import template

register = template.Library()

class PluralNode(template.Node):
    def __init__(self, quantity, single, plural):
        self.quantity = template.Variable(quantity)
        self.single = template.Variable(single)
        self.plural = template.Variable(plural)

    def render(self, context):
        if self.quantity.resolve(context) > 1:
            return u'%s' % self.plural.resolve(context)
        else:
            return u'%s' % self.single.resolve(context)

@register.tag(name="plural")
def do_plural(parser, token):
    try:
        # split_contents() knows not to split quoted strings.
        tag_name, quantity, single, plural = token.split_contents()
    except ValueError:
        raise template.TemplateSyntaxError, "%r tag requires exactly three arguments" % token.contents.split()[0]

    return PluralNode(quantity, single, plural)

More like this

  1. DRY template rendering decorator by pfylim 3 years, 3 months ago
  2. Easy Conditional Template Tags by fragsworth 3 years, 11 months ago
  3. simple tag-cloud Template Tag by metty 3 years, 8 months ago
  4. "for" template tag with support for "else" if array is empty by jezdez 5 years, 4 months ago
  5. Recurse template tag for Django by Zarin 5 years, 3 months ago

Comments

jdunck (on December 8, 2009):

What does this do that the pluralize filter doesn't?

#

(Forgotten your password?)