provide method for tweaking request/URL, esp remove trailing '/@@index.html'

This commit is contained in:
Helmut Merz 2016-06-17 09:43:29 +02:00
parent 81ae451969
commit 0d1a37b5d2

View file

@ -1,5 +1,5 @@
# #
# Copyright (c) 2011 Helmut Merz helmutm@cy55.de # Copyright (c) 2016 Helmut Merz helmutm@cy55.de
# #
# This program is free software; you can redistribute it and/or modify # This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by # it under the terms of the GNU General Public License as published by
@ -18,8 +18,6 @@
""" """
Basic view classes for layout-based presentation. Basic view classes for layout-based presentation.
$Id$
""" """
from zope import component from zope import component
@ -27,6 +25,7 @@ from zope.interface import Interface, implements
from zope.cachedescriptors.property import Lazy from zope.cachedescriptors.property import Lazy
from zope.app.pagetemplate import ViewPageTemplateFile from zope.app.pagetemplate import ViewPageTemplateFile
from zope.app.security.interfaces import IUnauthenticatedPrincipal from zope.app.security.interfaces import IUnauthenticatedPrincipal
from zope.publisher.http import URLGetter as BaseURLGetter
from cybertools.composer.layout.base import Layout from cybertools.composer.layout.base import Layout
from cybertools.composer.layout.interfaces import ILayoutManager from cybertools.composer.layout.interfaces import ILayoutManager
@ -54,6 +53,15 @@ class CachableRenderer(object):
return rendererTemplate(self.view, view=self.view, macro=self.renderer) return rendererTemplate(self.view, view=self.view, macro=self.renderer)
class URLGetter(BaseURLGetter):
def __str__(self):
url = self.__request.getURL()
if url.endswith('/@@index.html'):
url = url[:-len('/@@index.html')]
return url
class BaseView(object): class BaseView(object):
template = ViewPageTemplateFile('base.pt') template = ViewPageTemplateFile('base.pt')
@ -73,6 +81,10 @@ class BaseView(object):
def __call__(self): def __call__(self):
return self.template(self) return self.template(self)
@property
def requestUrl(self):
return URLGetter(self.request)
@Lazy @Lazy
def authenticated(self): def authenticated(self):
return not IUnauthenticatedPrincipal.providedBy(self.request.principal) return not IUnauthenticatedPrincipal.providedBy(self.request.principal)