void -> do
authorArmin Ronacher <armin.ronacher@active-4.com>
Thu, 15 May 2008 21:26:52 +0000 (23:26 +0200)
committerArmin Ronacher <armin.ronacher@active-4.com>
Thu, 15 May 2008 21:26:52 +0000 (23:26 +0200)
--HG--
branch : trunk

docs/extensions.rst
docs/templates.rst
jinja2-debug.py
jinja2/defaults.py
jinja2/ext.py

index 63e9cd93dd8d820027e9daa9f843995bf0bea2f8..4f9aa22fc975b054458e23cc706f555b234c40d3 100644 (file)
@@ -25,6 +25,8 @@ example creates a Jinja2 environment with the i18n extension loaded::
 i18n Extension
 --------------
 
+**Import name:** `jinja2.ext.i18n`
+
 Jinja2 currently comes with one extension, the i18n extension.  It can be
 used in combination with `gettext`_ or `babel`_.  If the i18n extension is
 enabled Jinja2 provides a `trans` statement that marks the wrapped string as
@@ -90,6 +92,16 @@ The usage of the `i18n` extension for template designers is covered as part
 .. _Babel: http://babel.edgewall.org/
 
 
+do
+~~
+
+**Import name:** `jinja2.ext.do`
+
+The do aka expression-statement extension adds a simple `do` tag to the
+template engine that works like a variable expression but ignores the
+return value.
+
+
 .. _writing-extensions:
 
 Writing Extensions
index 3adf98a702818d01ec330da95be75781bf13d6fb..935eff7fad5ebc72987c81cbb42f968be37a2a93 100644 (file)
@@ -1012,3 +1012,13 @@ To use placeholders you can use the `format` filter::
 
 For multiple placeholders always use keyword arguments to `format` as other
 languages may not use the words in the same order.
+
+
+do
+~~
+
+If the expression-statement extension is loaded a tag called `do` is available
+that works exactly like the regular variable expression (``{{ ... }}``) just
+that it doesn't print anything.  This can be used to modify lists:
+
+    {% do navigation.append('a string') %}
index f2fa94a04c5d24b51f1c1cd1a3a8f83c5b1327ff..a250a62ffd8835117754475a1aa1d6866d56957e 100755 (executable)
@@ -13,7 +13,7 @@ import sys
 import jinja2
 from werkzeug import script
 
-env = jinja2.Environment(extensions=['jinja2.ext.i18n'])
+env = jinja2.Environment(extensions=['jinja2.ext.i18n', 'jinja2.ext.do'])
 
 def shell_init_func():
     def _compile(x):
index 62dfda22542bdd8a837bc76392b033417cfde516..e12493076df6ea6c213272fd9bfd6d158b4b5c35 100644 (file)
@@ -25,8 +25,7 @@ LINE_STATEMENT_PREFIX = None
 DEFAULT_NAMESPACE = {
     'range':        xrange,
     'dict':         lambda **kw: kw,
-    'lipsum':       generate_lorem_ipsum,
-    'void':         lambda *a: u''
+    'lipsum':       generate_lorem_ipsum
 }
 
 
index 119fe4edd692cc4c560ad7ff5e8cb65cadf26396..bd64ccea25250ccf605a3326fda46ad52f5940b0 100644 (file)
@@ -277,6 +277,18 @@ class InternationalizationExtension(Extension):
         return nodes.Output([node])
 
 
+class ExprStmtExtension(Extension):
+    """Adds a `do` tag to Jinja2 that works like the print statement just
+    that it doesn't print the return value.
+    """
+    tags = set(['do'])
+
+    def parse(self, parser):
+        node = nodes.ExprStmt(lineno=parser.stream.next().lineno)
+        node.node = parser.parse_tuple()
+        return node
+
+
 def extract_from_ast(node, gettext_functions=GETTEXT_FUNCTIONS):
     """Extract localizable strings from the given template node.
 
@@ -360,3 +372,4 @@ def babel_extract(fileobj, keywords, comment_tags, options):
 
 #: nicer import names
 i18n = InternationalizationExtension
+do = ExprStmtExtension