Browse Source

Record blueprint registration order.

pull/1172/head
Armin Ronacher 10 years ago
parent
commit
c09a4317e4
  1. 3
      CHANGES
  2. 9
      flask/app.py
  3. 5
      flask/templating.py

3
CHANGES

@ -44,6 +44,9 @@ Version 1.0
- Added the ``EXPLAIN_TEMPLATE_LOADING`` config flag which when enabled will
instruct Flask to explain how it locates templates. This should help
users debug when the wrong templates are loaded.
- Enforce blueprint handling in the order they were registered for template
loading.
Version 0.10.2
--------------

9
flask/app.py

@ -472,6 +472,7 @@ class Flask(_PackageBoundObject):
#:
#: .. versionadded:: 0.7
self.blueprints = {}
self._blueprint_order = []
#: a place where extensions can store application specific state. For
#: example this is where an extension could store database engines and
@ -903,9 +904,17 @@ class Flask(_PackageBoundObject):
(blueprint, self.blueprints[blueprint.name], blueprint.name)
else:
self.blueprints[blueprint.name] = blueprint
self._blueprint_order.append(blueprint)
first_registration = True
blueprint.register(self, options, first_registration)
def iter_blueprints(self):
"""Iterates over all blueprints by the order they were registered.
.. versionadded:: 1.0
"""
return iter(self._blueprint_order)
@setupmethod
def add_url_rule(self, rule, endpoint=None, view_func=None, **options):
"""Connects a URL rule. Works exactly like the :meth:`route`

5
flask/templating.py

@ -13,7 +13,6 @@ from jinja2 import BaseLoader, Environment as BaseEnvironment, \
from .globals import _request_ctx_stack, _app_ctx_stack
from .signals import template_rendered
from ._compat import itervalues, iteritems
def _default_template_ctx_processor():
@ -81,7 +80,7 @@ class DispatchingJinjaLoader(BaseLoader):
if loader is not None:
yield self.app, loader
for blueprint in itervalues(self.app.blueprints):
for blueprint in self.app.iter_blueprints():
loader = blueprint.jinja_loader
if loader is not None:
yield blueprint, loader
@ -92,7 +91,7 @@ class DispatchingJinjaLoader(BaseLoader):
if loader is not None:
result.update(loader.list_templates())
for name, blueprint in iteritems(self.app.blueprints):
for blueprint in self.app.iter_blueprints():
loader = blueprint.jinja_loader
if loader is not None:
for template in loader.list_templates():

Loading…
Cancel
Save