Mercurial > piecrust2
changeset 298:b7ab1b503510
data: Fix incorrect next/previous page URLs in pagination data.
Consolidate splitting an URL between its first URL and its sub page number.
Be careful about the index page's URL not losing its slash.
author | Ludovic Chabant <ludovic@chabant.com> |
---|---|
date | Wed, 11 Mar 2015 23:46:42 -0700 |
parents | 2823ea40cfac |
children | 88bffd469b04 |
files | piecrust/data/builder.py piecrust/data/paginator.py piecrust/serving.py piecrust/templating/jinjaengine.py piecrust/uriutil.py |
diffstat | 5 files changed, 13 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/piecrust/data/builder.py Tue Mar 10 08:34:45 2015 -0700 +++ b/piecrust/data/builder.py Wed Mar 11 23:46:42 2015 -0700 @@ -7,7 +7,7 @@ from piecrust.data.debug import build_debug_info from piecrust.data.linker import PageLinkerData from piecrust.data.paginator import Paginator -from piecrust.uriutil import get_slug, get_first_sub_uri +from piecrust.uriutil import get_slug, split_sub_uri logger = logging.getLogger(__name__) @@ -29,7 +29,7 @@ def build_page_data(ctx): page = ctx.page app = page.app - first_uri = get_first_sub_uri(app, ctx.uri) + first_uri, _ = split_sub_uri(app, ctx.uri) pc_data = PieCrustData() pgn_source = ctx.pagination_source or get_default_pagination_source(page)
--- a/piecrust/data/paginator.py Tue Mar 10 08:34:45 2015 -0700 +++ b/piecrust/data/paginator.py Wed Mar 11 23:46:42 2015 -0700 @@ -212,7 +212,7 @@ def _getPageUri(self, index): uri = self._uri if index > 1: - if uri != '': + if not uri.endswith('/'): uri += '/' uri += str(index) return uri
--- a/piecrust/serving.py Tue Mar 10 08:34:45 2015 -0700 +++ b/piecrust/serving.py Wed Mar 11 23:46:42 2015 -0700 @@ -23,6 +23,7 @@ from piecrust.processing.base import ProcessorPipeline from piecrust.rendering import PageRenderingContext, render_page from piecrust.sources.base import PageFactory, MODE_PARSING +from piecrust.uriutil import split_sub_uri logger = logging.getLogger(__name__) @@ -222,13 +223,7 @@ def _try_serve_page(self, app, environ, request): # Try to find what matches the requested URL. - req_path = request.path - page_num = 1 - pgn_suffix_re = app.config.get('__cache/pagination_suffix_re') - pgn_suffix_m = re.search(pgn_suffix_re, request.path) - if pgn_suffix_m: - req_path = request.path[:pgn_suffix_m.start()] - page_num = int(pgn_suffix_m.group('num')) + req_path, page_num = split_sub_uri(app, request.path) routes = find_routes(app.routes, req_path) if len(routes) == 0:
--- a/piecrust/templating/jinjaengine.py Tue Mar 10 08:34:45 2015 -0700 +++ b/piecrust/templating/jinjaengine.py Wed Mar 11 23:46:42 2015 -0700 @@ -18,7 +18,7 @@ from piecrust.routing import CompositeRouteFunction from piecrust.templating.base import (TemplateEngine, TemplateNotFoundError, TemplatingError) -from piecrust.uriutil import multi_replace, get_first_sub_uri +from piecrust.uriutil import multi_replace, split_sub_uri logger = logging.getLogger(__name__) @@ -176,7 +176,7 @@ if cpi is None or cpi.page is None or cpi.render_ctx is None: raise Exception("Can't paginate when no page has been pushed " "on the execution stack.") - first_uri = get_first_sub_uri(self.app, cpi.render_ctx.uri) + first_uri, _ = split_sub_uri(self.app, cpi.render_ctx.uri) return Paginator(cpi.page, value, first_uri, page_num=cpi.render_ctx.page_num, items_per_page=items_per_page)
--- a/piecrust/uriutil.py Tue Mar 10 08:34:45 2015 -0700 +++ b/piecrust/uriutil.py Wed Mar 11 23:46:42 2015 -0700 @@ -80,18 +80,22 @@ return uri.lstrip('/') -def get_first_sub_uri(app, uri): +def split_sub_uri(app, uri): pretty_urls = app.config.get('site/pretty_urls') if not pretty_urls: uri, ext = os.path.splitext(uri) + page_num = 1 pgn_suffix_re = app.config.get('__cache/pagination_suffix_re') m = re.search(pgn_suffix_re, uri) if m: uri = uri[:m.start()] + if uri == '': + uri = '/' + page_num = int(m.group('num')) if not pretty_urls: uri += ext - return uri + return (uri, page_num)