def test_escaping(self): self.assertRaises(ParseError, lambda: Template("{{")) self.assertRaises(ParseError, lambda: Template("{%")) self.assertEqual(Template("{{!").generate(), b("{{")) self.assertEqual(Template("{%!").generate(), b("{%")) self.assertEqual( Template("{{ 'expr' }} {{!jquery expr}}").generate(), b("expr {{jquery expr}}"))
def test_unicode_literal_expression(self): # Unicode literals should be usable in templates. Note that this # test simulates unicode characters appearing directly in the # template file (with utf8 encoding), i.e. \u escapes would not # be used in the template file itself. if str is unicode: # python 3 needs a different version of this test since # 2to3 doesn't run on template internals template = Template(utf8(u'{{ "\u00e9" }}')) else: template = Template(utf8(u'{{ u"\u00e9" }}')) self.assertEqual(template.generate(), utf8(u"\u00e9"))
def test_comment(self): template = Template(utf8("{% comment blah blah %}foo")) self.assertEqual(template.generate(), b("foo"))
def test_if(self): template = Template(utf8("{% if x > 4 %}yes{% else %}no{% end %}")) self.assertEqual(template.generate(x=5), b("yes")) self.assertEqual(template.generate(x=3), b("no"))
def test_apply(self): def upper(s): return s.upper() template = Template(utf8("{% apply upper %}foo{% end %}")) self.assertEqual(template.generate(upper=upper), b("FOO"))
def test_simple(self): template = Template("Hello {{ name }}!") self.assertEqual(template.generate(name="Ben"), b("Hello Ben!"))
def test_unicode_template(self): template = Template(utf8(u"\u00e9")) self.assertEqual(template.generate(), utf8(u"\u00e9"))
def test_expressions(self): template = Template("2 + 2 = {{ 2 + 2 }}") self.assertEqual(template.generate(), b("2 + 2 = 4"))
def test_bytes(self): template = Template("Hello {{ name }}!") self.assertEqual(template.generate(name=utf8("Ben")), b("Hello Ben!"))
tmpl = Template("""\ <!doctype html> <html> <head> <title>{{ page_title }}</title> </head> <body> <div class="header"> <h1>{{ page_title }}</h1> </div> <ul class="navigation"> {% for href, caption in [ \ ('index.html', 'Index'), \ ('downloads.html', 'Downloads'), \ ('products.html', 'Products') \ ] %} <li><a href="{{ href }}">{{ caption }}</a></li> {% end %} </ul> <div class="table"> <table> {% for row in table %} <tr> {% for cell in row %} <td>{{ cell }}</td> {% end %} </tr> {% end %} </table> </div> </body> </html>\ """)