[mod_python] Building a web application using Cheetah and mod_python

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


More information about the Mod_python mailing list