[Zope3-Users] Re: Traverse to nearest site in menu action

Philipp von Weitershausen philipp at weitershausen.de
Wed Apr 6 15:33:26 EDT 2005


Florian Lindner wrote:
> Am Samstag, 2. April 2005 08:37 schrieb Stephan Richter:
> 
>>On Saturday 02 April 2005 04:38, jürgen Kartnaller wrote:
>>
>>>>Why in the world would you want to do that? This seems just awful. What
>>>>is your use case?
>>>
>>>In my case I want to have the possibility to jump back to my base view
>>>(which is the default view of my site) from wherever I am within my site.
>>>
>>>But, if there is an easier way to do this, please let me know.
>>
>>Then write a wrapper view for all interfaces that internally looks up the
>>next site and looks up the default view:
>>
>>class SiteDefaultView(object):
>>
>>  def __call__(self):
>>	site = getNextSiteSomehow()
>>	defaultViewName = getDefaultViewName(site, self.request, site)
>>	view = zapi.getMultiAdapter((site, request), Interface,
>>name=defaultViewName) return view()
> 
> 
> Hello,
> your solution:
> 
> class toSite(object):
>     def __call__(self):
>         from zope.app.zapi import *

ugh. Don't do "from xyz import *" imports. Here it's ok maybe because 
the scope of the import is limited to the __call_ method. But still, 
they're highly discouraged.

>         site = getSite()
>         defaultViewName = getDefaultViewName(site, self.request, site)
>         view = getMultiAdapter((site, self.request), name=defaultViewName)
>         return view()
> 
> get the same results as mine:
> 
> class toSite(object):
>     def __call__(self):
>         from zope.app.zapi import absoluteURL
>         URL = absoluteURL(getSite(), self.request)
>         return self.request.response.redirect(URL)
> 
> 
> What are the differences? Which is better? Why?
> 
> I think yours is better since it does not involve a redirect. What do you 
> think?

I think your solution is better, Florian. Stephan's solution, while 
correct, makes it look like a site can or maybe even should be accessed 
through http://mysite.com/someobject/@@getSite.html. That's of course 
not true, a site should always be reached at 
http://mysite.com/++etc++site, so IMO it's better to redirect.

(One case where the redirect is definitely better is bookmarks. Imagine 
somebody gets the site through Stephan's solution and bookmarks that 
page. Then, later, 'someobject' is renamed to 'anobject'; now the 
bookmark won't work anymore, even though the site is still there).

Philipp



More information about the Zope3-users mailing list