Seite 1 von 1
Cheetah methoden aus fremden Template importieren
Verfasst: Sonntag 26. April 2009, 18:58
von Jan.O
Hi,
Ist es möglich in cheetah eine datei methoden.tmpl zu haben, und diese dann in zB main.tmpl so einzubinden, dass alles was in methoden.tmpl mit "#def ..." definiert wurde erhalten bleibt? Bei #include methoden.tmpl wird nur der text importiert, nicht aber methoden-/variablen-definitionen.
Danke!
Jan
Verfasst: Sonntag 26. April 2009, 19:41
von Jan.O
Ok selbst gelöst. [Edit: doch nicht]
Alle dateien mit #extends einbinden und dann irgendwo im haupt-template "#implements respond" einfügen
Edit: Mist, funktionier nur bei maximal einem "extends"
Verfasst: Sonntag 26. April 2009, 20:27
von gerold
Hallo Jan!
Meinst du so etwas?
Code: Alles auswählen
#!/usr/bin/env python
#coding: utf-8
import cherrypy
from Cheetah.Template import Template
# Das hier steht normalerweise in eigenen Vorlagendateien
METHODS_TEMPLATE = """
#def table(rows):
<table border="1">
#for row in rows:
<tr>
#for col in row:
<td>$col</td>
#end for
</tr>
#end for
</table>
#end def
#def deflist(rows):
<dl>
#for (header, data) in rows:
<dt>$header</dt>
<dd>$data</dd>
#end for
</dl>
#end def
"""
# Das hier steht normalerweise in eigenen Vorlagendateien
INDEX_TEMPLATE = """<html>
<head></head>
<body>
#set $rows = [
["Max", "Mustermann"],
["Thomas", "Meier"]
]
$methods.table($rows)
$methods.deflist($rows)
</body>
</html>
"""
class Root(object):
def index(self, *args, **kwargs):
template = Template(INDEX_TEMPLATE)
template.methods = Template(METHODS_TEMPLATE)
return str(template)
index.exposed = True
def main():
cherrypy.quickstart(Root())
if __name__ == "__main__":
main()
mfg
Gerold

Verfasst: Sonntag 26. April 2009, 20:52
von Jan.O
Ja, danke, auf die idee es außerhalb der templates zu lösen bin ich gar nicht gekommen

War ja klar dass die lösung mal wieder von dir kommt
