[svn] added `xmlattr` filter to jinja
authorArmin Ronacher <armin.ronacher@active-4.com>
Sun, 15 Apr 2007 13:13:59 +0000 (15:13 +0200)
committerArmin Ronacher <armin.ronacher@active-4.com>
Sun, 15 Apr 2007 13:13:59 +0000 (15:13 +0200)
--HG--
branch : trunk

CHANGES
jinja/filters.py

diff --git a/CHANGES b/CHANGES
index 2d3482168cca80d4930710b3a0bb017eefd16e4b..08b316f3d6dab696e1aafa71a5aa5e45f2fb2e11 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -44,7 +44,7 @@ Version 1.1
 
 - added `sum`, `abs` and `round` filters. This fixes #238
 
-- added `striptags` filter.
+- added `striptags` and `xmlattr` filters for easier SGML/XML processing
 
 
 Version 1.0
index a6d0dd8e10bb86252e19e06745c73bb14b9e176b..6af5cec31cc5365fa2bd2f266f51095484141815 100644 (file)
@@ -118,6 +118,42 @@ def do_escape(attribute=False):
     return wrapped
 
 
+def do_xmlattr():
+    """
+    Create an SGML/XML attribute string based on the items in a dict.
+    All values that are neither `none` nor `undefined` are automatically
+    escaped:
+
+    .. sourcecode:: html
+
+        <ul{{ {'class': 'my_list', 'missing': None,
+               'id': 'list-%d'|format(variable) }}>
+        ...
+        </ul>
+
+    Results in something like this:
+
+        <ul class="my_list" id="list-42">
+        ...
+        </ul>
+
+    *New in Jinja 1.1*
+    """
+    e = escape
+    def wrapped(env, context, d):
+        if not hasattr(d, 'iteritems'):
+            raise TypeError('a dict is required')
+        result = []
+        for key, value in d.iteritems():
+            if value not in (None, Undefined):
+                result.append(u'%s="%s"' % (
+                    e(env.to_unicode(key)),
+                    e(env.to_unicode(value), True)
+                ))
+        return u' '.join(result)
+    return wrapped
+
+
 def do_capitalize(s):
     """
     Capitalize a value. The first character will be uppercase, all others
@@ -772,6 +808,7 @@ FILTERS = {
     'lower':                do_lower,
     'escape':               do_escape,
     'e':                    do_escape,
+    'xmlattr':              do_xmlattr,
     'capitalize':           do_capitalize,
     'title':                do_title,
     'default':              do_default,