<dd>{% input_field 'email' %}</dd>
<dt>URL</dt>
<dd>{% input_field 'url' %}</dd>
- <dt>Comment</dd>
+ <dt>Comment</dt>
<dd>{% textarea 'comment' %}</dd>
<dt>Captcha</dt>
<dd>{% input_field 'captcha' %}</dd>
--- /dev/null
+<div xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://genshi.edgewall.org/"
+ py:strip="">
+
+ <py:def function="input_field(name='', value='', type='text')">
+ <input type="$type" value="$value" name="$name" />
+ </py:def>
+
+ <py:def function="textarea(name, value='', rows=10, cols=40)">
+ <textarea name="$name" rows="$rows" cols="cols">$value</textarea>
+ </py:def>
+
+</div>
--- /dev/null
+<?python
+ from rwbench import dateformat
+?>
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xi="http://www.w3.org/2001/XInclude"
+ xmlns:py="http://genshi.edgewall.org/">
+ <xi:include href="layout.html" />
+ <xi:include href="helpers.html" />
+ <head><title>Index Page</title></head>
+ <body>
+ <div class="article" py:for="article in articles">
+ <py:if test="article.published">
+ <h2><a href="${article.href}">${article.title}</a></h2>
+ <p class="meta">written by <a href="${article.user.href}"
+ >${article.user.username}</a> on ${dateformat(article.pub_date)}</p>
+ <div class="text">${Markup(article.body)}</div>
+ </py:if>
+ </div>
+ <!--
+ For a fair and balanced comparison we would have to use a def here
+ that wraps the form data but I don't know what would be the best
+ Genshi equivalent for that. Quite frankly I doubt that this makes
+ sense in Genshi anyways.
+ -->
+ <form action="" method="post">
+ <dl>
+ <dt>Name</dt>
+ <dd>${input_field('name')}</dd>
+ <dt>E-Mail</dt>
+ <dd>${input_field('email')}</dd>
+ <dt>URL</dt>
+ <dd>${input_field('url')}</dd>
+ <dt>Comment</dt>
+ <dd>${textarea('comment')}</dd>
+ <dt>Captcha</dt>
+ <dd>${input_field('captcha')}</dd>
+ </dl>
+ ${input_field(type='submit', value='Submit')}
+ ${input_field(name='cancel', type='submit', value='Cancel')}
+ </form>
+ </body>
+</html>
--- /dev/null
+<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://genshi.edgewall.org/" >
+ <py:match path="head" once="true">
+ <head>
+ <title>${select('title/text()')} | RealWorld Benchmark</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ </head>
+ </py:match>
+ <py:match path="body" once="true">
+ <body>
+ <div class="contents">
+ <div class="header">
+ <h1>RealWorld Benchmark</h1>
+ <blockquote><p>
+ A less stupid benchmark for Mako and Jinja2 to get an impression how
+ code changes affect runtime performance.
+ </p></blockquote>
+ </div>
+ <ul class="navigation">
+ <li py:for="href, caption in page_navigation"><a href="$href">$caption</a></li>
+ </ul>
+ <div class="body">
+ ${select('*|text()')}
+ </div>
+ <div class="footer">
+ © Copyright 2008 by I don't know who.
+ </div>
+ </div>
+ </body>
+ </py:match>
+</html>
<dd>{{ input_field('email') }}</dd>
<dt>URL</dt>
<dd>{{ input_field('url') }}</dd>
- <dt>Comment</dd>
+ <dt>Comment</dt>
<dd>{{ textarea('comment') }}</dd>
<dt>Captcha</dt>
<dd>{{ input_field('captcha') }}</dd>
<dd>${input_field('email')}</dd>
<dt>URL</dt>
<dd>${input_field('url')}</dd>
- <dt>Comment</dd>
+ <dt>Comment</dt>
<dd>${textarea('comment')}</dd>
<dt>Captcha</dt>
<dd>${input_field('captcha')}</dd>
from jinja2 import Environment, FileSystemLoader
from jinja2.utils import generate_lorem_ipsum
from mako.lookup import TemplateLookup
+from genshi.template import TemplateLoader as GenshiTemplateLoader
def dateformat(x):
jinja_env = Environment(loader=FileSystemLoader(join(ROOT, 'jinja')))
jinja_env.filters['dateformat'] = dateformat
mako_lookup = TemplateLookup(directories=[join(ROOT, 'mako')])
+genshi_loader = GenshiTemplateLoader([join(ROOT, 'genshi')])
class Article(object):
jinja_template = jinja_env.get_template('index.html')
mako_template = mako_lookup.get_template('index.html')
+genshi_template = genshi_loader.load('index.html')
def test_jinja():
django_template.render(DjangoContext(context))
+def test_genshi():
+ genshi_template.generate(**context).render('html', doctype='html')
+
+
if __name__ == '__main__':
sys.stdout.write('Realworldish Benchmark:\n')
- for test in 'jinja', 'mako', 'django':
+ for test in 'jinja', 'mako', 'django', 'genshi':
t = Timer(setup='from __main__ import test_%s as bench' % test,
stmt='bench()')
sys.stdout.write(' >> %-20s<running>' % test)