diff options
Diffstat (limited to 'webapp/django/contrib/webdesign/templatetags/webdesign.py')
-rw-r--r-- | webapp/django/contrib/webdesign/templatetags/webdesign.py | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/webapp/django/contrib/webdesign/templatetags/webdesign.py b/webapp/django/contrib/webdesign/templatetags/webdesign.py new file mode 100644 index 0000000000..1eb1790132 --- /dev/null +++ b/webapp/django/contrib/webdesign/templatetags/webdesign.py @@ -0,0 +1,67 @@ +from django.contrib.webdesign.lorem_ipsum import words, paragraphs +from django import template + +register = template.Library() + +class LoremNode(template.Node): + def __init__(self, count, method, common): + self.count, self.method, self.common = count, method, common + + def render(self, context): + try: + count = int(self.count.resolve(context)) + except (ValueError, TypeError): + count = 1 + if self.method == 'w': + return words(count, common=self.common) + else: + paras = paragraphs(count, common=self.common) + if self.method == 'p': + paras = ['<p>%s</p>' % p for p in paras] + return u'\n\n'.join(paras) + +#@register.tag +def lorem(parser, token): + """ + Creates random Latin text useful for providing test data in templates. + + Usage format:: + + {% lorem [count] [method] [random] %} + + ``count`` is a number (or variable) containing the number of paragraphs or + words to generate (default is 1). + + ``method`` is either ``w`` for words, ``p`` for HTML paragraphs, ``b`` for + plain-text paragraph blocks (default is ``b``). + + ``random`` is the word ``random``, which if given, does not use the common + paragraph (starting "Lorem ipsum dolor sit amet, consectetuer..."). + + Examples: + * ``{% lorem %}`` will output the common "lorem ipsum" paragraph + * ``{% lorem 3 p %}`` will output the common "lorem ipsum" paragraph + and two random paragraphs each wrapped in HTML ``<p>`` tags + * ``{% lorem 2 w random %}`` will output two random latin words + """ + bits = list(token.split_contents()) + tagname = bits[0] + # Random bit + common = bits[-1] != 'random' + if not common: + bits.pop() + # Method bit + if bits[-1] in ('w', 'p', 'b'): + method = bits.pop() + else: + method = 'b' + # Count bit + if len(bits) > 1: + count = bits.pop() + else: + count = '1' + count = parser.compile_filter(count) + if len(bits) != 1: + raise template.TemplateSyntaxError("Incorrect format for %r tag" % tagname) + return LoremNode(count, method, common) +lorem = register.tag(lorem) |