Home / Class/ DispatchingJinjaLoader Class — flask Architecture

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)

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