[Cheetahtemplate-discuss] Re: How do I define a stylesheet when extending Cheetah.Templates.Skeleto
Brought to you by:
rtyler,
tavis_rudd
From: Paul M. <pf_...@ya...> - 2004-04-18 14:40:02
|
Chris Gahan <ch...@il...> writes: >> but the attributes are set on the class, and _SkeletonPage overrides >> them in the __init__(). >> >> I tried using #set $self._stylesheets, but that didn't work either (I >> suspect that, as my template is then implementing writeBody(), the >> attribute assignments are happening too late, as by the time that >> writeBody is called, stylesheetTags() has already been called...). >> >> Can anyone explain what is the correct way of doing this? > > I'm not sure if there's already a solution for this, but if not, a good way > to solve it would be to have the stylesheetTags() function check if the > "self" instance is a subclass of SkeletonPage, and if it's a subclass, to > merge the two dicts. I can think of a few ways I could do this if I were writing my own template like SkeletonPage. What I was really asking was how the existing SkeletonPage expects subclasses to do this. (AFAICT, the current code doesn't offer an easy way of doing this). On a related but more general note, I'm not sure how you'd define attributes to be set on the *instance* at initialisation time. As far as I can see, cheetah offers ways of doing the equivalent of setting class attributes: class MyPage: attr1 = 'whatever' ... by using #attr $attr1 = 'whatever' and setting instance attributes in a method: class MyPage: def respond(self): self.attr2 = 'another' by using #set $self.attr2 = 'another' But to get the instance attribute set at creation time, I need to override __init__() in what feels like a dreadfully low-level way: ## There are lots of bits here I don't know how to get right... #def __init__(??? *args, **kw ???) super(???, self).__init__(??? *args **kw ???) #set $self.attr3 = 'yet another' #end def Is there no better way of doing this? Thanks, Paul. -- This signature intentionally left blank |