@@ -149,19 +149,61 @@ def __getitem__(self, name):
149149 except NoTemplate , message :
150150 raise KeyError , message
151151
152+ class MultiLoader (LoaderBase ):
153+ def __init__ (self ):
154+ self .loaders = []
155+
156+ def add_loader (self , loader ):
157+ self .loaders .append (loader )
158+
159+ def check (self , name ):
160+ for l in self .loaders :
161+ if l .check (name ):
162+ return True
163+
164+ def load (self , name ):
165+ for l in self .loaders :
166+ if l .check (name ):
167+ return l .load (name )
168+
169+ def __getitem__ (self , name ):
170+ """Needed for TAL templates compatibility"""
171+ # [ ] document root and helper templates
172+ try :
173+ return self .load (name )
174+ except NoTemplate , message :
175+ raise KeyError , message
176+
177+
152178class TemplateBase :
153179 content_type = 'text/html'
154180
155- def get_loader (dir , engine_name ):
156- if engine_name == 'chameleon' :
157- from engine_chameleon import Loader
158- elif engine_name == 'jinja2' :
159- from engine_jinja2 import Jinja2Loader as Loader
160- elif engine_name == 'zopetal' :
161- from engine_zopetal import Loader
181+
182+ def get_loader (dir , template_engine ):
183+
184+ # Support for multiple engines using fallback mechanizm
185+ # meaning that if first engine can't find template, we
186+ # use the second
187+
188+ engines = template_engine .split (',' )
189+ engines = [x .strip () for x in engines ]
190+ ml = MultiLoader ()
191+
192+ for engine_name in engines :
193+ if engine_name == 'chameleon' :
194+ from engine_chameleon import Loader
195+ elif engine_name == 'jinja2' :
196+ from engine_jinja2 import Jinja2Loader as Loader
197+ elif engine_name == 'zopetal' :
198+ from engine_zopetal import Loader
199+ else :
200+ raise Exception ('Unknown template engine "%s"' % engine_name )
201+ ml .add_loader (Loader (dir ))
202+
203+ if len (engines ) == 1 :
204+ return ml .loaders [0 ]
162205 else :
163- raise Exception ('Unknown template engine "%s"' % engine_name )
164- return Loader (dir )
206+ return ml
165207
166208# --/ Template Loader API
167209
0 commit comments