Re: [Cheetahtemplate-discuss] #def woes
Brought to you by:
rtyler,
tavis_rudd
From: R. T. B. <ty...@sl...> - 2009-05-21 21:58:28
|
On Thu, May 21, 2009 at 02:55:50PM -0700, mob...@gm... wrote: > #set $faa = self.foo > > This is cool calling with self. doesnt autocall It doesn't call because you're in the right hand operand (where you need not use Cheetah syntax), and you're not using the '$'. When you use the $, that invokes the NameMapper which is responsible for autocalling. I personally prefer this option to $getVar() which feels distinctly non-Pythonic ;) > On 5/20/09, Michael Higgins <hi...@rh...> wrote: > > On May 20, 2009, at 4:18 PM, R. Tyler Ballance wrote: > > I /think/ this should work: > #set $faa = foo > > I'm not running the latest and greatest, but that doesn't work for me. > What *does* work for me is saying > > #set $faa = self.foo > > Exploiting self in such an unvarnished way seems like it might be too > close to relying on an implementation detail, but maybe it's okay. I > guess Cheetah already has to guarantee not to do name-mangling or > something so that Python code can call Cheetah methods properly... > > Alternatively, you can use: > #set $faa = $foo > > If you compile the templates with autocalling disabled > > Personally, I'm not a huge fan of tweaking the compile settings a lot > for different templates. It's just one more thing that can mysteriously > break and take a long time to figure out. > > To answer mobiledreamer's (later) question about what a wrapper function > would look like: > > ## return a callable value for $name > #def F($name) > #return $getVar($name, autoCall=False) > #end def > > #set $faa = $F('foo') > > ... assuming the self trick isn't the preferable style. (It's certainly > shorter!) > > Mike > > -- > Bidegg worlds best auction site > http://bidegg.com -- -R. Tyler Ballance Slide, Inc. |