{"record":{"id":"c98d2658906fd162","repo":"microsoft/graphrag","slug":"error-rendering-template-template-name-e-s","errorCode":null,"errorMessage":"Error rendering template '{template_name}': {e!s}","messagePattern":"Error rendering template '(.+?)': (.+?)","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"packages/graphrag-llm/graphrag_llm/templating/jinja_template_engine.py","lineNumber":50,"sourceCode":"\n    def render(self, template_name: str, context: dict[str, Any]) -> str:\n        \"\"\"Render a template with the given context.\"\"\"\n        jinja_template = self._templates.get(template_name)\n        if jinja_template is None:\n            template_contents = self._template_manager.get(template_name)\n            if template_contents is None:\n                msg = f\"Template '{template_name}' not found.\"\n                raise KeyError(msg)\n            jinja_template = Template(template_contents, undefined=StrictUndefined)\n            self._templates[template_name] = jinja_template\n        try:\n            return jinja_template.render(**context)\n        except UndefinedError as e:\n            msg = f\"Missing key in context for template '{template_name}': {e.message}\"\n            raise KeyError(msg) from e\n        except Exception as e:\n            msg = f\"Error rendering template '{template_name}': {e!s}\"\n            raise RuntimeError(msg) from e\n\n    @property\n    def template_manager(self) -> \"TemplateManager\":\n        \"\"\"Template manager associated with this engine.\"\"\"\n        return self._template_manager\n","sourceCodeStart":32,"sourceCodeEnd":56,"githubUrl":"https://github.com/microsoft/graphrag/blob/f40e9a26ce62ba0b3fef8837d24aafdcc6e6c704/packages/graphrag-llm/graphrag_llm/templating/jinja_template_engine.py#L32-L56","documentation":"JinjaTemplateEngine.render wraps any non-UndefinedError exception from jinja_template.render() in a RuntimeError with the template name and the original message. This catches genuine Jinja failures such as syntax errors in the template, bad filters, or invalid operations on context values, chaining the original exception as __cause__.","triggerScenarios":"Calling render() with a template containing Jinja syntax errors, applying an undefined/nonexistent filter, or performing invalid operations (e.g. arithmetic on None) on context values.","commonSituations":"Hand-edited templates with syntax mistakes, filters requiring extra extensions not loaded, or context values with unexpected types.","solutions":["Inspect the chained original exception (e.__cause__) and message for the underlying Jinja error","Fix the template syntax/filter or load the required Jinja extension","Validate the types of context values passed to render","Preview/test templates with jinja2.Template(...).render in isolation to confirm they compile"],"exampleFix":"# before\n{{ name | nosuchfilter }}\n\n# after\n{{ name | upper }}","handlingStrategy":"try-catch","validationCode":"from jinja2 import Environment, TemplateSyntaxError\n\nsrc = engine.template_manager.get(name)\nif src is not None:\n    try:\n        Environment().parse(src)\n    except TemplateSyntaxError as e:\n        raise ValueError(f\"Template {name} has syntax error: {e}\") from e","typeGuard":"from jinja2 import Environment, TemplateSyntaxError\n\ndef template_compiles(src: str) -> bool:\n    try:\n        Environment().parse(src)\n        return True\n    except TemplateSyntaxError:\n        return False","tryCatchPattern":"try:\n    out = engine.render(name, ctx)\nexcept RuntimeError as e:\n    log.error(\"Template render failed: %s\", e)\n    if e.__cause__ is not None:\n        log.error(\"Underlying Jinja error: %r\", e.__cause__)\n    raise","preventionTips":["Parse/compile templates once at startup to catch syntax errors early","Type-check context values before render","Load required Jinja extensions when constructing engines"],"tags":["graphrag-llm","templating","jinja2","render-error"],"backgroundTag":"jinja-template-render-failure","analyzedSha":"f40e9a26ce62ba0b3fef8837d24aafdcc6e6c704","analyzedAt":"2026-08-27T11:16:29.677Z","schemaVersion":2},"datasetVersion":"2026-08-27T13:17:12.746Z"}