Re: [Cheetahtemplate-discuss] recipe for extending/subclassing a dynamically generated template cla
Brought to you by:
rtyler,
tavis_rudd
From: <jo...@cy...> - 2006-06-14 16:53:10
|
thanks Mike, now the errors I was getting make more sense. The couple of times I did get the below code to work was because I had at some point already defined base elsewhere. At this point I might just stick with statically compiling my parent templates as that seems to be the most stable thing to do, and there is really no reason not to do that Jose > -------- Original Message -------- > Subject: Re: [Cheetahtemplate-discuss] recipe for extending/subclassing > a dynamically generated template class > From: "Mike Orr" <slu...@gm...> > Date: Wed, June 14, 2006 12:20 am > To: "Jose Galvez" <jo...@cy...> > Cc: che...@li... > > On 6/13/06, Jose Galvez <jo...@cy...> wrote: > > Can someone please tell my why this does not work in a template, I > > thought it should but it does not > > > > ================ > > #set base = Template.compile(file='chTemplates/base.tmpl')) > > #from $base import base > > #extends base > > the rest of the template > > > > If I comment out the above code the template compile just fine. > > Jose > > #set is a runtime directive. Remember that when you're filling a > template, you're actually calling an instance method. The above is > exactly like putting: > > base = Template.compile(file='chTemplates/base.tmpl') > > inside your own Python method; it sets a local variable. > > The #from puts a "from ... import" at the top of the module. 'base' > is not defined at that point. There are two other errors here: > > 1) In Python, the word after 'from' must be the name of a module that > will be found in the filesystem (or has been previously registered in > sys.modules), not an expression referring to a module object. > > 2) Because Cheetah compiles '$base' to 'base' if it knows it's a > local/global/builtin rather than a searchList item, you can get away > with some unorthodox usages, like putting a variable name where Python > requires a literal, or using #set or #silent to create a 'del' > statement. But this depends on a quirk in Cheetah that happens to > exploit a characteristic of Python's syntax (variable names in Python > don't have $prefixes @like %Perl). It's not a feature that should be > depended on. Use $placeholders only where Python would allow an > expression, or as traditional $placeholders in the text. > > To continue the analysis, #extends is a signal to the compiler to > change the template's base class. That's equivalent to: > > class MyTemplate(base): > > Of course, 'base' is not defined at this point either -- it's defined > inside a method of that class. > > -- > Mike Orr <slu...@gm...> > > > _______________________________________________ > Cheetahtemplate-discuss mailing list > Che...@li... > https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss |