Mercurial > libervia-web
comparison src/server/server.py @ 978:c8cafe316f6f
pages: removed trailing_slash option:
this option is used for relative URLs, but it seems more reasonable to build absolute URL from the server, so templates are not dependants of the way the pages hierarchy is done.
author | Goffi <goffi@goffi.org> |
---|---|
date | Sun, 12 Nov 2017 12:51:56 +0100 |
parents | 4aa38c49bff7 |
children | 1d558dfb32ca |
comparison
equal
deleted
inserted
replaced
977:d0de2a98e852 | 978:c8cafe316f6f |
---|---|
1303 class LiberviaPage(web_resource.Resource): | 1303 class LiberviaPage(web_resource.Resource): |
1304 isLeaf = True # we handle subpages ourself | 1304 isLeaf = True # we handle subpages ourself |
1305 named_pages = {} | 1305 named_pages = {} |
1306 uri_callbacks = {} | 1306 uri_callbacks = {} |
1307 | 1307 |
1308 def __init__(self, host, root_dir, url, name=None, redirect=None, trailing_slash=False, access=None, parse_url=None, | 1308 def __init__(self, host, root_dir, url, name=None, redirect=None, access=None, parse_url=None, |
1309 prepare_render=None, render=None, template=None, on_data_post=None): | 1309 prepare_render=None, render=None, template=None, on_data_post=None): |
1310 """initiate LiberviaPages | 1310 """initiate LiberviaPages |
1311 | 1311 |
1312 LiberviaPages are the main resources of Libervia, using easy to set python files | 1312 LiberviaPages are the main resources of Libervia, using easy to set python files |
1313 The arguments are the variables found in page_meta.py | 1313 The arguments are the variables found in page_meta.py |
1321 @param redirect(unicode, None): if not None, this page will be redirected. A redirected | 1321 @param redirect(unicode, None): if not None, this page will be redirected. A redirected |
1322 parameter is used as in self.pageRedirect. parse_url will not be skipped | 1322 parameter is used as in self.pageRedirect. parse_url will not be skipped |
1323 using this redirect parameter is called "full redirection" | 1323 using this redirect parameter is called "full redirection" |
1324 using self.pageRedirect is called "partial redirection" (because some rendering method | 1324 using self.pageRedirect is called "partial redirection" (because some rendering method |
1325 can still be used, e.g. parse_url) | 1325 can still be used, e.g. parse_url) |
1326 @param trailing_slash(bool): if True, page will be redirected to (url + '/') if url is not already ended by a '/'. | |
1327 This is specially useful for relative links | |
1328 @param access(unicode, None): permission needed to access the page | 1326 @param access(unicode, None): permission needed to access the page |
1329 None means public access. | 1327 None means public access. |
1330 Pages inherit from parent pages: e.g. if a "settings" page is restricted to admins, | 1328 Pages inherit from parent pages: e.g. if a "settings" page is restricted to admins, |
1331 and if "settings/blog" is public, it still can only be accessed by admins. | 1329 and if "settings/blog" is public, it still can only be accessed by admins. |
1332 see C.PAGES_ACCESS_* for details | 1330 see C.PAGES_ACCESS_* for details |
1370 raise ValueError(_(u"you can't use full page redirection with other rendering method," | 1368 raise ValueError(_(u"you can't use full page redirection with other rendering method," |
1371 u"check self.pageRedirect if you need to use them")) | 1369 u"check self.pageRedirect if you need to use them")) |
1372 self.redirect = redirect | 1370 self.redirect = redirect |
1373 else: | 1371 else: |
1374 self.redirect = None | 1372 self.redirect = None |
1375 self.trailing_slash = trailing_slash | |
1376 self.parse_url = parse_url | 1373 self.parse_url = parse_url |
1377 self.prepare_render = prepare_render | 1374 self.prepare_render = prepare_render |
1378 self.template = template | 1375 self.template = template |
1379 self.render_method = render | 1376 self.render_method = render |
1380 self.on_data_post = on_data_post | 1377 self.on_data_post = on_data_post |
1417 host, | 1414 host, |
1418 dir_path, | 1415 dir_path, |
1419 u'/' + u'/'.join(new_path), | 1416 u'/' + u'/'.join(new_path), |
1420 name=page_data.get('name'), | 1417 name=page_data.get('name'), |
1421 redirect=page_data.get('redirect'), | 1418 redirect=page_data.get('redirect'), |
1422 trailing_slash = page_data.get('trailing_slash'), | |
1423 access=page_data.get('access'), | 1419 access=page_data.get('access'), |
1424 parse_url=page_data.get('parse_url'), | 1420 parse_url=page_data.get('parse_url'), |
1425 prepare_render=page_data.get('prepare_render'), | 1421 prepare_render=page_data.get('prepare_render'), |
1426 render=page_data.get('render'), | 1422 render=page_data.get('render'), |
1427 template=page_data.get('template'), | 1423 template=page_data.get('template'), |
1817 | 1813 |
1818 def renderPage(self, request, skip_parse_url=False): | 1814 def renderPage(self, request, skip_parse_url=False): |
1819 """Main method to handle the workflow of a LiberviaPage""" | 1815 """Main method to handle the workflow of a LiberviaPage""" |
1820 # template_data are the variables passed to template | 1816 # template_data are the variables passed to template |
1821 if not hasattr(request, 'template_data'): | 1817 if not hasattr(request, 'template_data'): |
1822 if self.trailing_slash and request.path and not request.path[-1] == '/': | |
1823 return web_util.redirectTo(request.path + '/', request) | |
1824 session_data = self.host.getSessionData(request, session_iface.ISATSession) | 1818 session_data = self.host.getSessionData(request, session_iface.ISATSession) |
1825 csrf_token = session_data.csrf_token | 1819 csrf_token = session_data.csrf_token |
1826 request.template_data = {u'csrf_token': csrf_token} | 1820 request.template_data = {u'csrf_token': csrf_token} |
1827 | 1821 |
1828 # XXX: here is the code which need to be executed once | 1822 # XXX: here is the code which need to be executed once |