# HG changeset patch # User Ludovic Chabant # Date 1475211138 25200 # Node ID 0da1207472d3518bf94762bc9d30b88884bc188a # Parent 87df68be4cc873ef9bf2ac41c5b7b8cd8afe132f templating: Put the routing functions in the data, not the template engine. diff -r 87df68be4cc8 -r 0da1207472d3 piecrust/data/builder.py --- a/piecrust/data/builder.py Thu Sep 29 21:28:20 2016 -0700 +++ b/piecrust/data/builder.py Thu Sep 29 21:52:18 2016 -0700 @@ -7,6 +7,7 @@ from piecrust.data.paginator import Paginator from piecrust.data.piecrustdata import PieCrustData from piecrust.data.providersdata import DataProvidersData +from piecrust.routing import CompositeRouteFunction logger = logging.getLogger(__name__) @@ -49,6 +50,20 @@ 'family': linker } + for route in app.routes: + name = route.func_name + func = data.get(name) + if func is None: + func = CompositeRouteFunction() + func.addFunc(route) + data[name] = func + elif isinstance(func, CompositeRouteFunction): + func.addFunc(route) + else: + raise Exception("Route function '%s' collides with an " + "existing function or template data." % + name) + #TODO: handle slugified taxonomy terms. site_data = app.config.getAll() diff -r 87df68be4cc8 -r 0da1207472d3 piecrust/templating/jinjaengine.py --- a/piecrust/templating/jinjaengine.py Thu Sep 29 21:28:20 2016 -0700 +++ b/piecrust/templating/jinjaengine.py Thu Sep 29 21:52:18 2016 -0700 @@ -17,7 +17,6 @@ from piecrust.data.paginator import Paginator from piecrust.environment import AbortedSourceUseError from piecrust.rendering import format_text -from piecrust.routing import CompositeRouteFunction from piecrust.templating.base import (TemplateEngine, TemplateNotFoundError, TemplatingError) from piecrust.uriutil import multi_replace @@ -234,21 +233,6 @@ self.filters['raw'] = self.filters['safe'] self.globals['pcfail'] = raise_exception - # Add route functions. - for route in app.routes: - name = route.func_name - func = self.globals.get(name) - if func is None: - func = CompositeRouteFunction() - func.addFunc(route) - self.globals[name] = func - elif isinstance(func, CompositeRouteFunction): - self.globals[name].addFunc(route) - else: - raise Exception("Route function '%s' collides with an " - "existing function or template data." % - name) - def _paginate(self, value, items_per_page=5): cpi = self.app.env.exec_info_stack.current_page_info if cpi is None or cpi.page is None or cpi.render_ctx is None: