Current HTTP Request
Invirt exposes the current http4k Request to the Pebble template engine, so templates can
read query parameters, build new URIs, or render request-derived state without the handler having to
pass each value explicitly.
The current request is made available automatically whenever you respond with a view via
InvirtView.ok(request), InvirtView.status(request, status), renderTemplate(request, ...),
or errorResponse(request, ...).
In Pebble templates
Pebble templates can access the request directly via the request
object in the root context, when not inside a macro. Inside macros, use the request()
function instead, since macros don't have access to the global context.
{% macro requestSummary() %}
{{ request().uri }}
{{ request().method }}
{% endmacro %}
{{ request.method }}
{{ request.query("q") }}
InvirtRequest
Inside templates the request is wrapped in an InvirtRequest, which implements http4k's
Request interface by delegating to the original
request. The wrapper adds Kotlin-extension-style helpers that Pebble cannot otherwise reach (Pebble does not
resolve Kotlin extension functions), for URI manipulation and
sort handling.
{% if request.hasQueryValue('type', 'person') %}
<a href="{{ request.replaceQuery('type', 'company') }}">
Show companies
</a>
{% endif %}
Access from a handler
Inside a handler the request is available as the lambda argument, so there is no need for a thread-local or context lookup.
"/items" GET { request ->
val sort = request.sort()
val page = request.page()
// ...
}