fiber/docs/guide/templates.md

2.7 KiB

id title description sidebar_position
templates 📝 Templates Fiber supports server-side template engines. 3

import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem';

Template interfaces

Fiber provides a Views interface to provide your own template engine:

type Views interface {
    Load() error
    Render(out io.Writer, name string, binding any, layout ...string) error
}

Views interface contains a Load and Render method, Load is executed by Fiber on app initialization to load/parse the templates.

// Pass engine to Fiber's Views Engine
app := fiber.New(fiber.Config{
    Views: engine,
    // Views Layout is the global layout for all template render until override on Render function.
    ViewsLayout: "layouts/main"
})

The Render method is linked to the ctx.Render() function that accepts a template name and binding data. It will use global layout if layout is not being defined in Render function. If the Fiber config option PassLocalsToViews is enabled, then all locals set using ctx.Locals(key, value) will be passed to the template.

app.Get("/", func(c fiber.Ctx) error {
    return c.Render("index", fiber.Map{
        "hello": "world",
    });
})

Engines

Fiber team maintains templates package that provides wrappers for multiple template engines:

package main

import (
    "log"
    "github.com/gofiber/fiber/v3"
    "github.com/gofiber/template/html/v2"
)

func main() {
    // Initialize standard Go html template engine
    engine := html.New("./views", ".html")
    // If you want other engine, just replace with following
    // Create a new engine with django
	// engine := django.New("./views", ".django")

    app := fiber.New(fiber.Config{
        Views: engine,
    })
    app.Get("/", func(c fiber.Ctx) error {
        // Render index template
        return c.Render("index", fiber.Map{
            "Title": "Hello, World!",
        })
    })

    log.Fatal(app.Listen(":3000"))
}
<!DOCTYPE html>
<body>
    <h1>{{.Title}}</h1>
</body>
</html>