ANN: QWeb, a python framework to build web applications quickly
Antony Lesuisse
spam-python at udev.org
Tue Apr 11 18:23:36 CEST 2006
Can you imagine a day without a new python web framework ?
QWeb is Yet an another web framework (WSGI compatible).
This one is in the spirit of web.py (http://webpy.org/)
URL: http://antony.lesuisse.org/qweb/trac/
It provides:
* A lightweight request handler (QWebRequest)
* An xml templating engine (QWebXml and QWebHtml)
* A simple name based controler (qweb_control)
* A standalone WSGI Server (QWebWSGIServer)
* A cgi and fastcgi WSGI wrapper (taken from flup)
* A startup function that starts cgi, factgi or standalone according to
the evironement (qweb_autorun).
The templating system (that can be used independently) is IMHO superior to
everything else. It looks like kid or ZPT. It takes pure XML to generate any
kind of textual output (valid or non valid xml). It's very simple
and extensible. QWebHtml is an extension of the basic templates
that support urls and forms.
The example blog shows how to use the templates:
http://antony.lesuisse.org/qweb/files/QWeb-0.5-blog.tar.gz
It's a small blog engine with comments made of 2 files. It uses
sqlobject and sqlite as backend.
blog.py 131 lines long (model and controller)
template.xml 380 lines long (views 6 templates)
The demo example illustrate the use of the request object and static
component:
http://antony.lesuisse.org/qweb/files/QWeb-0.5-demo.tar.gz
Helloworld
----------
import qweb
def helloapp(environ, start_response):
req = qweb.QWebRequest(environ, start_response)
req.response_headers['Content-type'] = 'text/plain'
req.write('Hello World')
return req
if __name__ == '__main__':
qweb.qweb_wsgi_autorun(helloapp)
Example template:
-----------------
<t t-name="democall">
democall called, <br/>
<t t-esc="0"/> <br/>
<t t-esc="arg1"/> <br/>
<t t-esc="arg2"/> <br/>
</t>
<t t-name="demo_template">
<h2>The QWebXml and QWebHTML templating system</h2>
<pre>
Basic tags: t-raw t-esc t-if t-foreach t-call t-set t-trim
</pre>
<a t-att-class="varname">test</a>
<t t-raw="varname"/>
<t t-esc="varname"/>
<t t-if="1==2">KO</t>
<t t-if="1!=2">OK</t>
<t t-call="democall">
<t t-set="arg1">the value of arg1</t>
<t t-set="arg2" t-eval="2+2"/>
body of the call
</t>
<t t-foreach="range(10)" t-as="i">
i= <t t-esc="i"/><br/>
</t>
</t>
Usage of template:
------------------
import qweb
t=qweb.QWebHtml('file.xml')
t.render("demo_template",{'varname':"some text with a tag <tag>"})
More information about the Python-announce-list
mailing list