Cheetah methoden aus fremden Template importieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Jan.O
User
Beiträge: 61
Registriert: Samstag 26. April 2008, 00:32

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
Jan.O
User
Beiträge: 61
Registriert: Samstag 26. April 2008, 00:32

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"
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

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
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Jan.O
User
Beiträge: 61
Registriert: Samstag 26. April 2008, 00:32

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:
Antworten