|
@@ -19,6 +19,7 @@ from django.template.smartif import IfParser, Literal
|
|
|
from django.template.defaultfilters import date
|
|
|
from django.utils.deprecation import RemovedInDjango20Warning
|
|
|
from django.utils.encoding import force_text, smart_text
|
|
|
+from django.utils.lorem_ipsum import words, paragraphs
|
|
|
from django.utils.safestring import mark_safe
|
|
|
from django.utils.html import format_html
|
|
|
from django.utils import six
|
|
@@ -324,6 +325,24 @@ class IfNode(Node):
|
|
|
return ''
|
|
|
|
|
|
|
|
|
+class LoremNode(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 '\n\n'.join(paras)
|
|
|
+
|
|
|
+
|
|
|
class RegroupNode(Node):
|
|
|
def __init__(self, target, expression, var_name):
|
|
|
self.target, self.expression = target, expression
|
|
@@ -1116,6 +1135,53 @@ def load(parser, token):
|
|
|
return LoadNode()
|
|
|
|
|
|
|
|
|
+@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]
|
|
|
+
|
|
|
+ common = bits[-1] != 'random'
|
|
|
+ if not common:
|
|
|
+ bits.pop()
|
|
|
+
|
|
|
+ if bits[-1] in ('w', 'p', 'b'):
|
|
|
+ method = bits.pop()
|
|
|
+ else:
|
|
|
+ method = 'b'
|
|
|
+
|
|
|
+ if len(bits) > 1:
|
|
|
+ count = bits.pop()
|
|
|
+ else:
|
|
|
+ count = '1'
|
|
|
+ count = parser.compile_filter(count)
|
|
|
+ if len(bits) != 1:
|
|
|
+ raise TemplateSyntaxError("Incorrect format for %r tag" % tagname)
|
|
|
+ return LoremNode(count, method, common)
|
|
|
+
|
|
|
+
|
|
|
@register.tag
|
|
|
def now(parser, token):
|
|
|
"""
|