void -> do
--HG--
branch : trunk
diff --git a/docs/extensions.rst b/docs/extensions.rst
index 63e9cd9..4f9aa22 100644
--- a/docs/extensions.rst
+++ b/docs/extensions.rst
@@ -25,6 +25,8 @@
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 @@
.. _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
diff --git a/docs/templates.rst b/docs/templates.rst
index 3adf98a..935eff7 100644
--- a/docs/templates.rst
+++ b/docs/templates.rst
@@ -1012,3 +1012,13 @@
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') %}
diff --git a/jinja2-debug.py b/jinja2-debug.py
index f2fa94a..a250a62 100755
--- a/jinja2-debug.py
+++ b/jinja2-debug.py
@@ -13,7 +13,7 @@
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):
diff --git a/jinja2/defaults.py b/jinja2/defaults.py
index 62dfda2..e124930 100644
--- a/jinja2/defaults.py
+++ b/jinja2/defaults.py
@@ -25,8 +25,7 @@
DEFAULT_NAMESPACE = {
'range': xrange,
'dict': lambda **kw: kw,
- 'lipsum': generate_lorem_ipsum,
- 'void': lambda *a: u''
+ 'lipsum': generate_lorem_ipsum
}
diff --git a/jinja2/ext.py b/jinja2/ext.py
index 119fe4e..bd64cce 100644
--- a/jinja2/ext.py
+++ b/jinja2/ext.py
@@ -277,6 +277,18 @@
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 @@
#: nicer import names
i18n = InternationalizationExtension
+do = ExprStmtExtension