Skip to main content

Templating

Template rendering for HTML pages, built on Tera.

Template

The top-level Template class configures the engine.

Constructor

Template()

Creates an empty engine. Nothing is loaded until load() is called.

Methods

register_function

register_function(name: str, callable) -> None

Exposes a Python callable to templates. Must be called before load(); calling it afterwards raises RuntimeError.

template = templating.Template()
template.register_function("add", lambda a, b: a + b)

In a template: {{ add(a=1, b=2) }} renders 3.

load

load(dir: str = "./templates/**/*.html") -> None

Parses and validates all templates matching the glob pattern. Raises RuntimeError if the engine is shared across references, and PyException for invalid globs or template errors.

Attaching to the server

server.template(template)

render

The free function renders a template into a Response:

render(request: Request, name: str, context: dict | None = None) -> Response
  • Uses the template engine attached to the server
  • Serves the result with Content-Type: text/html
  • Makes session available to templates as {{ session }} when the session middleware set it
  • Raises ValueError if no template engine is configured
from oxapy import Router, get, render


@get("/")
def index(request):
return render(request, "index.html", {"title": "Home Page"})

Example: complete setup

from oxapy import Oxapy, Router, get, render, templating


def translate(key):
return translations.get(key, key)


def main():
template = templating.Template()
template.register_function("_t", translate)
template.load("./templates/**/*.html")

@get("/")
def index(request):
return render(request, "index.html", {"title": "Home"})

(
Oxapy(("127.0.0.1", 8000))
.template(template)
.attach(Router().route(index))
.run()
)