--- name: jinja2 description: Best practices for template rendering with Jinja2 including environments, filters, autoescaping, and security. --- # Skill: Jinja2 Best practices for template rendering with Jinja2 including environments, filters, autoescaping, and security. ## When to Use Apply this skill when rendering templates with Jinja2 — HTML pages, emails, configuration files, and code generation. ## Environment - Create a `jinja2.Environment(loader=..., autoescape=...)` once and reuse it. - Use `FileSystemLoader` for file-based templates, `PackageLoader` for installed packages. - Enable `autoescape=True` for HTML templates to prevent XSS. ## Templates - Use `{{ variable }}` for output, `{% if/for/block %}` for control flow. - Use template inheritance (`{% extends 'base.html' %}`) for layout reuse. - Define custom filters for reusable transformations. ## Security - **Always** enable `autoescape=True` when rendering HTML. - Use `SandboxedEnvironment` for untrusted templates. - Never render user input as template code — only as template data. - Use `|e` filter explicitly when autoescape is off. ## Pitfalls - Don't use `Template(string)` directly — it bypasses the environment's loader and settings. - Watch for undefined variable errors — use `undefined=StrictUndefined` during development. - Avoid complex logic in templates — keep them focused on presentation.