]> git.ipfire.org Git - thirdparty/starlette.git/commitdiff
Allow Environment options in `Jinja2Templates` (#1401)
authorAmin Alaee <mohammadamin.alaee@gmail.com>
Wed, 19 Jan 2022 13:38:57 +0000 (14:38 +0100)
committerGitHub <noreply@github.com>
Wed, 19 Jan 2022 13:38:57 +0000 (14:38 +0100)
docs/templates.md
starlette/templating.py

index b6766992009131a08ad78e496d858af59030e261..181cd1fefb03e7acad2ea9a44a664b4f3a4beb25 100644 (file)
@@ -64,6 +64,20 @@ def test_homepage():
     assert "request" in response.context
 ```
 
+## Customizing Jinja2 Environment
+
+`Jinja2Templates` accepts all options supported by Jinja2 `Environment`.
+This will allow more control over the `Enivornment` instance created by Starlette.
+
+For the list of options available to `Environment` you can check Jinja2 documentation [here](https://jinja.palletsprojects.com/en/3.0.x/api/#jinja2.Environment)
+
+```python
+from starlette.templating import Jinja2Templates
+
+
+templates = Jinja2Templates(directory='templates', autoescape=False, auto_reload=True)
+```
+
 ## Asynchronous template rendering
 
 Jinja2 supports async template rendering, however as a general rule
index 18d5eb40c0f39484b6ee899f36c9a2dbccb2e1dd..a44edddc20d173788a572c110fad0245faaf9a69 100644 (file)
@@ -55,12 +55,14 @@ class Jinja2Templates:
     return templates.TemplateResponse("index.html", {"request": request})
     """
 
-    def __init__(self, directory: typing.Union[str, PathLike]) -> None:
+    def __init__(
+        self, directory: typing.Union[str, PathLike], **env_options: typing.Any
+    ) -> None:
         assert jinja2 is not None, "jinja2 must be installed to use Jinja2Templates"
-        self.env = self._create_env(directory)
+        self.env = self._create_env(directory, **env_options)
 
     def _create_env(
-        self, directory: typing.Union[str, PathLike]
+        self, directory: typing.Union[str, PathLike], **env_options: typing.Any
     ) -> "jinja2.Environment":
         @pass_context
         def url_for(context: dict, name: str, **path_params: typing.Any) -> str:
@@ -68,7 +70,10 @@ class Jinja2Templates:
             return request.url_for(name, **path_params)
 
         loader = jinja2.FileSystemLoader(directory)
-        env = jinja2.Environment(loader=loader, autoescape=True)
+        env_options.setdefault("loader", loader)
+        env_options.setdefault("autoescape", True)
+
+        env = jinja2.Environment(**env_options)
         env.globals["url_for"] = url_for
         return env