Graham Dumpleton
grahamd at dscpl.com.au
Tue Oct 31 17:29:57 EST 2006
Sebastian Celis wrote .. > 3) Cheetah and #include > > I have read a lot about why mod_python sets the current working > directory to '/', but this seems to be causing some larger problems > when cheetah comes into play. (3) and (4) discuss two issues that I > am having trouble with. > > Here is /var/www/app/templates/testPage.tmpl: > ### > #include 'header_include.tmpl' > <head> > <title>$title</title> > </head> > <body> > <p>$message</p> > </body> > #include 'footer_include.tmpl' > ### > > However, as this actually tries to load /header_include.tmpl and > /footer_include.tmpl instead of the ones located in my templates > directory, this will not work. I came up with two workarounds, > however I don't really love either: Use something like: from mod_python import apache from Cheetah.Template import Template ### START NEW CODE class PathResolver: def __init__(self, base): self.__base = base def __call__(self, path=None): if path: return os.path.join(self.__base, path) return None ### FINISH NEW CODE def index(req): req.content_type = "text/html" dict = {'title': 'My Title!', 'message': 'Hello world!'} templateModule = apache.import_module("templates/myTemplate") t = getattr(templateModule, "myTemplate")() searchList = t.searchList() searchList.insert(0, dict) ### START NEW CODE # Override Servlet.serverSidePath so that it returns path # relative to the directory where we say module is located. t.serverSidePath = PathResolver(os.path.dirname(templateModule.__file__)) ### FINISH NEW CODE return(t.respond()) This replaces the underlying method that is used calculate the actual path when you use #include. By doing it in the servlet, you don't have to do anything trick in the actual .tmpl file. Graham
|