Einfacher Webserver zum Testen von Genshi-Templates
Verfasst: Donnerstag 20. September 2007, 14:14
Hallo zusammen,
wie hier zu lesen ist, bechäftige ich mich derzeit etwas ausführlicher mit Genshi.
Dazu habe ich mir folgenden kleinen Webserver geschrieben:
Der Server läuft und tut was ich will ...
Aber ... da wären noch zwei kleine Details, di mir irgendwie nicht gefallen wollen:
wie hier zu lesen ist, bechäftige ich mich derzeit etwas ausführlicher mit Genshi.
Dazu habe ich mir folgenden kleinen Webserver geschrieben:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
from genshi.template import TemplateLoader, TemplateSyntaxError
loader = TemplateLoader(".", auto_reload=True)
class MyHandler(BaseHTTPRequestHandler):
LIST_TEMPLATE = """<html><head><title>Files</title></head><body><h1 align="center">Files</h1><hr><ul>%s</ul></body></html>"""
ERROR_TEMPLATE = """<html><head><title>TemplateSyntaxError</title></head><body><h1 align="center">TemplateSyntaxError</h1><hr>%s</body></html>"""
def send_data(self, data, status=200, content_type="text/html"):
self.send_response(status)
self.send_header("Content-type", content_type)
self.end_headers()
self.wfile.write(data)
def do_GET(self):
if self.path == "/":
file_list = (f for f in os.listdir(".") if f.endswith(".tmpl"))
item_list = "\n".join(("""<li><a href="%s">%s</a></li>""" % (item, item) for item in file_list))
result = MyHandler.LIST_TEMPLATE % item_list
self.send_data(result)
elif self.path.endswith(".tmpl"):
try:
tmpl = loader.load(self.path[1:])
stream = tmpl.generate()
output = stream.render(method="xhtml", doctype="xhtml")
except TemplateSyntaxError, e:
output = MyHandler.ERROR_TEMPLATE % e.msg
self.send_data(output)
else:
self.send_error(404, "File not found ...")
def main():
server = HTTPServer(("localhost", 8000), MyHandler)
try:
server.serve_forever()
except KeyboardInterrupt:
server.socket.close()
if "__main__" == __name__:
main()
Aber ... da wären noch zwei kleine Details, di mir irgendwie nicht gefallen wollen:
- Die globale Variable loader:
- Einfacheres Beenden des Servers ... (Bis jetzt darf ich im CLI-Fenster erst mal STRG-C drücken und im Browser die Seite neu laden damit der Server sich beendet