DispatchingJinjaLoader Class — flask Architecture
Architecture documentation for the DispatchingJinjaLoader class in templating.py from the flask codebase.
Entity Profile
Dependency Diagram
graph TD ce7c5a28_2f4c_e0c5_2d77_2fb8ab5e5b96["DispatchingJinjaLoader"] 554becd3_25b5_c670_a654_7a20377dec19["templating.py"] ce7c5a28_2f4c_e0c5_2d77_2fb8ab5e5b96 -->|defined in| 554becd3_25b5_c670_a654_7a20377dec19 49f481c4_746f_06e5_c19e_98b2565a118e["__init__()"] ce7c5a28_2f4c_e0c5_2d77_2fb8ab5e5b96 -->|method| 49f481c4_746f_06e5_c19e_98b2565a118e b3cc43b1_0505_0227_784f_924230ab33b2["get_source()"] ce7c5a28_2f4c_e0c5_2d77_2fb8ab5e5b96 -->|method| b3cc43b1_0505_0227_784f_924230ab33b2 a0ae334c_2e07_622b_8d12_f4de60d403d1["_get_source_explained()"] ce7c5a28_2f4c_e0c5_2d77_2fb8ab5e5b96 -->|method| a0ae334c_2e07_622b_8d12_f4de60d403d1 4dbac2da_ce3c_7080_fe1b_8d51de4d6a30["_get_source_fast()"] ce7c5a28_2f4c_e0c5_2d77_2fb8ab5e5b96 -->|method| 4dbac2da_ce3c_7080_fe1b_8d51de4d6a30 8030a5bc_ccd5_2b7d_46af_a753d088616b["_iter_loaders()"] ce7c5a28_2f4c_e0c5_2d77_2fb8ab5e5b96 -->|method| 8030a5bc_ccd5_2b7d_46af_a753d088616b 16f09dbc_ac83_37d4_7e88_f3c868b7d86e["list_templates()"] ce7c5a28_2f4c_e0c5_2d77_2fb8ab5e5b96 -->|method| 16f09dbc_ac83_37d4_7e88_f3c868b7d86e
Relationship Graph
Source Code
src/flask/templating.py lines 48–119
class DispatchingJinjaLoader(BaseLoader):
"""A loader that looks for templates in the application and all
the blueprint folders.
"""
def __init__(self, app: App) -> None:
self.app = app
def get_source(
self, environment: BaseEnvironment, template: str
) -> tuple[str, str | None, t.Callable[[], bool] | None]:
if self.app.config["EXPLAIN_TEMPLATE_LOADING"]:
return self._get_source_explained(environment, template)
return self._get_source_fast(environment, template)
def _get_source_explained(
self, environment: BaseEnvironment, template: str
) -> tuple[str, str | None, t.Callable[[], bool] | None]:
attempts = []
rv: tuple[str, str | None, t.Callable[[], bool] | None] | None
trv: None | (tuple[str, str | None, t.Callable[[], bool] | None]) = None
for srcobj, loader in self._iter_loaders(template):
try:
rv = loader.get_source(environment, template)
if trv is None:
trv = rv
except TemplateNotFound:
rv = None
attempts.append((loader, srcobj, rv))
from .debughelpers import explain_template_loading_attempts
explain_template_loading_attempts(self.app, template, attempts)
if trv is not None:
return trv
raise TemplateNotFound(template)
def _get_source_fast(
self, environment: BaseEnvironment, template: str
) -> tuple[str, str | None, t.Callable[[], bool] | None]:
for _srcobj, loader in self._iter_loaders(template):
try:
return loader.get_source(environment, template)
except TemplateNotFound:
continue
raise TemplateNotFound(template)
def _iter_loaders(self, template: str) -> t.Iterator[tuple[Scaffold, BaseLoader]]:
loader = self.app.jinja_loader
if loader is not None:
yield self.app, loader
for blueprint in self.app.iter_blueprints():
loader = blueprint.jinja_loader
if loader is not None:
yield blueprint, loader
def list_templates(self) -> list[str]:
result = set()
loader = self.app.jinja_loader
if loader is not None:
result.update(loader.list_templates())
for blueprint in self.app.iter_blueprints():
loader = blueprint.jinja_loader
if loader is not None:
for template in loader.list_templates():
result.add(template)
return list(result)
Domain
Defined In
Source
Frequently Asked Questions
What is the DispatchingJinjaLoader class?
DispatchingJinjaLoader is a class in the flask codebase, defined in src/flask/templating.py.
Where is DispatchingJinjaLoader defined?
DispatchingJinjaLoader is defined in src/flask/templating.py at line 48.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free