Problem mit Cheetah Vorlagenvererbung
Verfasst: Donnerstag 12. August 2010, 11:54
Hallo,
vorweg möchte ich mal ein großes Dankeschön an Gerold, für seinen wunderbaren: "Erfahrungsbericht - CherryPy und Cheetah", richten.
Zu meinem Problem:
Ich habe mir für meine gesamte Struktur eine Hauptvorlage (main.tmpl) erstellt:
Der Block C soll dann je nach aufgerufener Seite überschrieben werden. Bsp (imprint.tmpl):
Mein Problem ist jetzt, dass ich nicht weiß wie ich die Vorlagen mit Cherrypy SAUBER befüllen kann. Hier zunächst mal mein Cherry-Skript (maincherry.py):
Ich könnte jetzt natürlich in jeder einzelnen Methode die recent-Platzhalter ($rName1,...) füllen, allerdings halt ich das nicht für Sauber, da es für alle Methoden die selben Werte sind. Ich würde gerne zuerst das Main.tmpl füllen, und dann je nach Bedarf den "Block C". Leider komme ich auf keine Idee wie ich dies bewerkstelligen kann. Ich hoffe es kann mir hierbei jemand auf die Sprünge helfen.
Gruß tjuXx
vorweg möchte ich mal ein großes Dankeschön an Gerold, für seinen wunderbaren: "Erfahrungsbericht - CherryPy und Cheetah", richten.
Zu meinem Problem:
Ich habe mir für meine gesamte Struktur eine Hauptvorlage (main.tmpl) erstellt:
Code: Alles auswählen
#encoding UTF-8
#attr title = "Home"
#attr content = "<p>Herzlich Willkommen</p>"
#attr $rName1 = 'No Data'
#attr $rName2 = 'No Data'
#attr $rName3 = 'No Data'
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title>... - $title</title></head>
<body>
<div id="main"><div id="left"></div>
<div id="center">
<ul class="nav">
<li class="home"></li>
<li class="something"></li>
<li class="recent">
<ul class="recent">
<li class="top">$rName1</li>
<li>$rName2</li>
<li>$rName3</li>
</ul>
</li>
</ul>
#block login
<form id="login">...</form>
#end block login
</div><div id="right"></div>
<div id="content">
#block C
<h1>$title</h1>
$content
#end block C
</div>
</div>
</body>
</html>
Code: Alles auswählen
#encoding UTF-8
#extends main
#attr title = "Impressum"
#attr content = "<p>Name<br>Strasse<br>D-PLZ Ort</p>"
#block C
<h1>$title</h1>
$content
#end block C
Code: Alles auswählen
#!/usr/bin/python
# -*- coding: utf-8 -*-
import cherrypy
import os
from Cheetah.Template import Template
APPDIR = os.path.dirname(os.path.abspath(__file__))
INI_FILENAME = os.path.join(APPDIR, "maincherry.ini")
class Root(object):
def index(self):
template = Template(file = os.path.join(APPDIR, "index.tmpl"))
return str(template)
index.exposed = True
def imprint(self):
template = Template(file = os.path.join(APPDIR, "imprint.tmpl"))
return str(template)
imprint.exposed = True
def main():
cherrypy.quickstart(Root(), config = INI_FILENAME)
if __name__ == "__main__":
main()
Gruß tjuXx