[Zope3-Users] Re: Still a skinning problem

Jürgen Kartnaller juergen at kartnaller.at
Wed Feb 7 01:50:00 EST 2007


Florian,
if you want the url to your current site implement this :


class SiteUrlView(object):

     def __call__(self):
         return absoluteURL(hooks.getSite(), self.request)

And register a page :

   <page
       name="site_url"
       for="*"
       class=".views.SiteUrlView"
       permission="zope.Public"
       />

Now you can use context/@@site_url anywhere.


Juergen


Florian Lindner wrote:
> Am Dienstag, 6. Februar 2007 11:43 schrieb Mohsen Moeeni:
>> Until the gurus find time to jump in with `the right` solution...
>>
>> On 2/5/07, Florian Lindner <mailinglists at xgm.de> wrote:
>>> The line in the template.pt:
>>> <a tal:attributes="href context/@@index.html/@@absolute_url">home</a>
>>> works fine as long as context is an IXGM, because index.html is
>>> registered for IXGM. But if a view from the IBlog is called is it also
>>> rendered in the template.pt but context now is a IBlog which does not
>>> have an index.html (or at leat not the one I want) and therefore fails.
>> Your template *assumes* the context will always have
>> an `index.html` view. So it can not be used for a
>> context that doesn't have it. 
> 
> I know that's the problem.
> 
>> At any rate, context 
>> is not the best object you can use to link to home.
>> It's better to use site root for that purpose. Something
>> like:
>>
>> <a tal:attributes="href view/siteroot/@@index.html/@@absolute_url">home</a>
>>
>> Where you find site root using zope3 APIs in view code and
>> assign it to siteroot.
> 
> Now there is still the problem that I need a view class that implements 
> siteroot for every view that uses template.pt.
> Or can I use a view class for the template itself? (tried but did not work).
> 
> Any other idea or do I don't really understand you?
> 
> Thanks,
> 
> Florian



More information about the Zope3-users mailing list