summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Hellkamp <marc@gsites.de>2011-10-07 14:32:45 +0200
committerMarcel Hellkamp <marc@gsites.de>2011-10-11 17:49:18 +0200
commit00133d48c4c58c99233a424925ea834f3f69b486 (patch)
tree74c15b798025e5353be841b10aaa8cbece88dc46
parentbf40a6c6c9bac3508ce388683b5ec50c3840ad54 (diff)
downloadbottle-00133d48c4c58c99233a424925ea834f3f69b486.tar.gz
Added three new functions to the SimpleTemplate default namespace:
* get() works like dict.get() on the namespace. * setdefault() works similar, but sets the value if not defined. * defined() checks if a name exists in the current namespace.
-rwxr-xr-xbottle.py3
-rwxr-xr-xtest/test_stpl.py15
2 files changed, 17 insertions, 1 deletions
diff --git a/bottle.py b/bottle.py
index 0785a38..db13ee2 100755
--- a/bottle.py
+++ b/bottle.py
@@ -2684,7 +2684,8 @@ class SimpleTemplate(BaseTemplate):
env = self.defaults.copy()
env.update({'_stdout': _stdout, '_printlist': _stdout.extend,
'_include': self.subtemplate, '_str': self._str,
- '_escape': self._escape})
+ '_escape': self._escape, 'get': env.get,
+ 'setdefault': env.setdefault, 'defined': env.__contains__})
env.update(kwargs)
eval(self.co, env)
if '_rebase' in env:
diff --git a/test/test_stpl.py b/test/test_stpl.py
index 2e6bfdc..ed3d5d7 100755
--- a/test/test_stpl.py
+++ b/test/test_stpl.py
@@ -160,6 +160,21 @@ class TestSimpleTemplate(unittest.TestCase):
result=u'+base+\n+main+\n!1234!\n+include+\n-main-\n+include+\n-base-\n'
self.assertEqual(result, t.render(content='1234'))
+ def test_get(self):
+ t = SimpleTemplate(source='{{get("x", "default")}}')
+ self.assertEqual('1234', t.render(x='1234'))
+ self.assertEqual('default', t.render())
+
+ def test_setdefault(self):
+ t = SimpleTemplate(source='%setdefault("x", "default")\n{{x}}')
+ self.assertEqual('1234', t.render(x='1234'))
+ self.assertEqual('default', t.render())
+
+ def test_defnied(self):
+ t = SimpleTemplate(source='{{x if defined("x") else "no"}}')
+ self.assertEqual('yes', t.render(x='yes'))
+ self.assertEqual('no', t.render())
+
def test_notfound(self):
""" Templates: Unavailable templates"""
self.assertRaises(TemplateError, SimpleTemplate, name="abcdef")