Rendering templates¶
MicroPie can render HTML templates using the Jinja2 template engine.
Templates allow you to separate presentation from code by placing
HTML in separate files. Template rendering is optional; you can use
MicroPie without Jinja2 installed, but the
_render_template() helper will return a
500 Internal Server Error: Jinja2 not installed. message unless
Jinja2 is installed.
Installing Jinja2¶
If you installed MicroPie with the [standard] extra, Jinja2 is
already available. Otherwise install it with pip:
$ pip install jinja2
Creating templates¶
MicroPie looks for templates in a directory called templates in
your current working directory. Use normal Jinja2 syntax in your
templates. Here is a simple templates/index.html file:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{ title }}</title>
</head>
<body>
<h1>{{ message }}</h1>
</body>
</html>
Rendering a template¶
To render a template, call _render_template() from
within an asynchronous handler. The method returns a string containing
the rendered HTML. Because template loading and rendering may block,
MicroPie runs it in a background thread using asyncio.to_thread.
from micropie import App
class MyApp(App):
async def index(self):
return await self._render_template(
"index.html",
title="Welcome",
message="Hello from MicroPie!",
)
app = MyApp()
When you visit / in your browser, MicroPie returns the rendered
HTML with a Content‑Type of text/html; charset=utf‑8.
Template variables¶
You can pass arbitrary keyword arguments to _render_template. These become variables in the Jinja2 template. For more information on creating complex templates, including inheritance and control flow, refer to the Jinja2 documentation.