Behavior on non definded name in Cheetah

Peter Otten __peter__ at web.de
Wed Aug 2 07:38:01 EDT 2006


Paolo Pantaleo wrote:

> 2006/8/2, Stephan Diehl <stephan.diehl at gmx.net>:
>> Paolo Pantaleo wrote:
>> > [I hope I am posting to the right place]
>> >
>> > I have a cheetah template something like this:
>> >
>> > x is: $x
>> > y is: $y
>> > z is: $z
>> >
>> > [Actually more complicated]
>> >
>> > If for example $y is not defined I get an exception and  the parsing
>> > of the template stops. Is  there any way to substitute $y with an emty
>> > string and making cheeta going on with parsing?
>> >
>> > Thnx
>> > PAolo
>> >
>>
>>
http://cheetahtemplate.org/docs/users_guide_html_multipage/language.namemapper.missing.html
>> --
>> http://mail.python.org/mailman/listinfo/python-list
>>
> 
> Actually I wanted to keep things simple for who writes the template,
> so I am using this workaround: I define a class
> 
> class ClassMapper:
>     def __init__(self,dict={}):
>         self.__dict=dict
>     def getValue(self,str):
>         try:
>             return self.__dict[str]
>         except KeyError:
>             return ""
> 
> x=ClassMapper(dict)
> Template(definition, searchList=[{"info":x.getValue}])
> 
> 
> 
> so the user should do
> 
> $info("name")
> 
> Maybe I could define a class that implements a dictionary and doesn''t
> raise an exception for a key not present... but it seems to
> complicated.

You mean something like

from Cheetah.Template import Template

class Dict(dict):
    def __getitem__(self, key):
        return self.get(key, "")

template = """\
x is $x
y is $y
z is $z
"""
print Template(template, searchList=[Dict(x="x", y="y")])

You can also make a debugging version:

class Dict(dict):
    def __getitem__(self, key):
        return self.get(key, "#missing key: %r#" % key)

Peter




More information about the Python-list mailing list