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

Cheetah methoden aus fremden Template importieren

Beitragvon Jan.O » Sonntag 26. April 2009, 18:58

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

Beitragvon Jan.O » Sonntag 26. April 2009, 19:41

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Sonntag 26. April 2009, 20:27

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

Beitragvon Jan.O » Sonntag 26. April 2009, 20:52

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:

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], Kniffte, pixewakb