Re: #def woes

[email protected]
Newsgroups gmane.comp.python.cheetah
Message-ID <[email protected]>
why do u not like autocalling?

On Thu, May 21, 2009 at 3:59 PM, R. Tyler Ballance <[email protected]> wrote:

> On Thu, May 21, 2009 at 03:52:08PM -0700, [email protected] wrote:
> >    #def displayfloat($a)
> >    $("%.2f"%$a)#slurp
> >    #end def
> >    #set showfloat = $getVar('displayfloat', autoCall=False)
> >
> >    ## return a callable value for $name
> >    #def callable($name)
> >    #return $getVar($name, autoCall=False)
> >    #end def
> >
> >    #set showfloat =$callable('displayfloat')
>
> Dude you're stomping on builtins, you probably shouldn't do that:
>
>                >>> callable
>                <built-in function callable>
>                >>>
>
> The first example you've got works fine:
>
>                >>> from Cheetah.Template import Template
>                >> t = Template('''#def displayfloat(a)
>                 ... $("%.2f"%$a)#slurp
>                ... #end def
>                ... #set showfloat = $getVar('displayfloat', autoCall=False)
>                 ... $showfloat(3.14)
>                ... ''')
>                >>> t.respond()
>                u'3.14\n'
>                >>>
>
> I'm not sure what you're doing, it could be due to overriding the builtin
> callable() function which NameMapper *does* use for lookups (stupid
> auto-calling), that's my only guess for why this is failing for you.
>
> >
> >    both these options dont work
> >        return str(compiled_tmpl)
> >      File "/usr/lib/python2.5/site-packages/Cheetah/Template.py", line
> 997,
> >    in __str__
> >        return getattr(self, mainMethName)()
> >      File "<string>", line 3514, in respond
> >    NotFound: cannot find 'showfloat' while searching for 'showfloat'
> >
> >    On Thu, May 21, 2009 at 2:57 PM, R. Tyler Ballance <[email protected]>
> >    wrote:
> >
> >      On Thu, May 21, 2009 at 02:55:50PM -0700, [email protected]
> >      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 <[email protected]> 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.
> >
> >    --
> >    Bidegg worlds best auction site
> >    http://bidegg.com
>
> --
> -R. Tyler Ballance
> Slide, Inc.
>



-- 
Bidegg worlds best auction site
http://bidegg.com

------------------------------------------------------------------------------
Register Now for Creativity and Technology (CaT), June 3rd, NYC. CaT
is a gathering of tech-side developers & brand creativity professionals. Meet
the minds behind Google Creative Lab, Visual Complexity, Processing, & 
iPhoneDevCamp asthey present alongside digital heavyweights like Barbarian
Group, R/GA, & Big Spaceship. http://www.creativitycat.com

_______________________________________________
Cheetahtemplate-discuss mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/cheetahtemplate-discuss
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.