elif env is not None:
self.env = env
+ self._setup_env_defaults(self.env)
+
def _create_env(
self,
directory: "typing.Union[str, PathLike[typing.AnyStr], typing.Sequence[typing.Union[str, PathLike[typing.AnyStr]]]]", # noqa: E501
**env_options: typing.Any,
) -> "jinja2.Environment":
+ loader = jinja2.FileSystemLoader(directory)
+ env_options.setdefault("loader", loader)
+ env_options.setdefault("autoescape", True)
+
+ return jinja2.Environment(**env_options)
+
+ def _setup_env_defaults(self, env: "jinja2.Environment") -> None:
@pass_context
def url_for(
context: typing.Dict[str, typing.Any],
request: Request = context["request"]
return request.url_for(name, **path_params)
- loader = jinja2.FileSystemLoader(directory)
- env_options.setdefault("loader", loader)
- env_options.setdefault("autoescape", True)
-
- env = jinja2.Environment(**env_options)
- env.globals["url_for"] = url_for
- return env
+ env.globals.setdefault("url_for", url_for)
def get_template(self, name: str) -> "jinja2.Template":
return self.env.get_template(name)
assert template.render({}) == "Hello"
-def test_templates_with_environment(tmpdir):
+def test_templates_with_environment(tmpdir, test_client_factory):
path = os.path.join(tmpdir, "index.html")
with open(path, "w") as file:
- file.write("Hello")
+ file.write("<html>Hello, <a href='{{ url_for('homepage') }}'>world</a></html>")
+
+ async def homepage(request):
+ return templates.TemplateResponse(request, "index.html")
env = jinja2.Environment(loader=jinja2.FileSystemLoader(str(tmpdir)))
+ app = Starlette(
+ debug=True,
+ routes=[Route("/", endpoint=homepage)],
+ )
templates = Jinja2Templates(env=env)
- template = templates.get_template("index.html")
- assert template.render({}) == "Hello"
+ client = test_client_factory(app)
+ response = client.get("/")
+ assert response.text == "<html>Hello, <a href='http://testserver/'>world</a></html>"
+ assert response.template.name == "index.html"
+ assert set(response.context.keys()) == {"request"}
def test_templates_with_environment_options_emit_warning(tmpdir):