author | Tero Marttila <terom@fixme.fi> |
Sat, 07 Feb 2009 05:12:57 +0200 | |
changeset 28 | b68145b5ce24 |
parent 26 | 9d3beac1b196 |
child 32 | be954df4f0e8 |
permissions | -rw-r--r-- |
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
Template handler |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
# use Mako |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
6 |
from mako import exceptions |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
from mako.template import Template |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
from mako.lookup import TemplateLookup |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
# for http.ResponseError |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
11 |
import http |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
12 |
|
26
9d3beac1b196
remove foo.html page, and rice up the footer a bit
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
13 |
import helpers |
9d3beac1b196
remove foo.html page, and rice up the footer a bit
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
14 |
|
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
# path to template files |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
TEMPLATE_DIR = "templates" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
17 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
18 |
# path to cached templates |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
19 |
CACHE_DIR = "cache/templates" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
20 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
21 |
# template file extension |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
22 |
TEMPLATE_EXT = "tmpl" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
23 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
24 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
25 |
# our Mako template lookup handler |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
26 |
_lookup = TemplateLookup(directories=[TEMPLATE_DIR], module_directory=CACHE_DIR) |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
27 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
28 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
29 |
class TemplateError (http.ResponseError) : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
Raised by the template module functions |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
32 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
34 |
pass |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
35 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
36 |
def lookup (name) : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
37 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
38 |
Looks up a template based on the bare "name", which does not include the path or file extension |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
39 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
40 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
41 |
try : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
42 |
return _lookup.get_template("%s.%s" % (name, TEMPLATE_EXT)) |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
43 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
44 |
except : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
45 |
raise TemplateError("Template broken: %r" % (name, ), status='500 Internal Server Error', details=exceptions.text_error_template().render()) |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
46 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
47 |
def load (path) : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
48 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
49 |
Loads a template from a specific file |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
50 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
51 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
52 |
try : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
53 |
return Template(filename=path, module_directory=CACHE_DIR) |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
54 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
55 |
except : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
56 |
raise TemplateError("Template broken: %r" % (path, ), status='500 Internal Server Error', details=exceptions.text_error_template().render()) |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
57 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
58 |
def render_template (tpl, **params) : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
59 |
""" |
21
b05979822dee
some unicode fixes, layout tweaks, a link icon
Tero Marttila <terom@fixme.fi>
parents:
11
diff
changeset
|
60 |
Render the given template, returning the output as a unicode string, or raising a TemplateError |
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
61 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
62 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
63 |
try : |
26
9d3beac1b196
remove foo.html page, and rice up the footer a bit
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
64 |
return tpl.render_unicode( |
9d3beac1b196
remove foo.html page, and rice up the footer a bit
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
65 |
# global helper stuff |
9d3beac1b196
remove foo.html page, and rice up the footer a bit
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
66 |
h = helpers, |
9d3beac1b196
remove foo.html page, and rice up the footer a bit
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
67 |
|
9d3beac1b196
remove foo.html page, and rice up the footer a bit
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
68 |
# render-specific params |
9d3beac1b196
remove foo.html page, and rice up the footer a bit
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
69 |
**params |
9d3beac1b196
remove foo.html page, and rice up the footer a bit
Tero Marttila <terom@fixme.fi>
parents:
21
diff
changeset
|
70 |
) |
11 | 71 |
|
72 |
# a template may render other templates |
|
73 |
except TemplateError : |
|
74 |
raise |
|
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
75 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
76 |
except : |
11 | 77 |
details = exceptions.text_error_template().render() |
78 |
||
79 |
raise TemplateError("Template render failed", status='500 Internal Server Error', details=details) |
|
8
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
80 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
81 |
def render (name, **params) : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
82 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
83 |
Render a template, using lookup() on the given name |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
84 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
85 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
86 |
return render_template(lookup(name), **params) |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
87 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
88 |
def render_file (path, **params) : |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
89 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
90 |
Render a template, using load() on the given path |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
91 |
""" |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
92 |
|
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
93 |
return render_template(load(path), **params) |
0ce1f471e9d7
and it works, a lot better than before
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
94 |