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 :D War ja klar dass die lösung mal wieder von dir kommt :wink: