django

package
v0.0.0-...-676dfab Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 29, 2023 License: MIT Imports: 10 Imported by: 0

README

Django

Django is a template engine create by flosch, to see the original syntax documentation please click here

Basic Example

./views/index.django

{% include "partials/header.django" %}

<h1>{{ Title }}</h1>

{% include "partials/footer.django" %}

./views/partials/header.django

<h2>Header</h2>

./views/partials/footer.django

<h2>Footer</h2>

./views/layouts/main.django

<!DOCTYPE html>
<html>

<head>
  <title>Main</title>
</head>

<body>
  {{embed}}
</body>

</html>
package main

import (
	"log"

	"github.com/boomhut/fiber/v2"
	"github.com/gofiber/template/django"
)

func main() {
	// Create a new engine
	engine := django.New("./views", ".django")

  // Or from an embedded system
  // See github.com/gofiber/embed for examples
  // engine := html.NewFileSystem(http.Dir("./views", ".django"))

	// Pass the engine to the Views
	app := fiber.New(fiber.Config{
		Views: engine,
	})

	app.Get("/", func(c *fiber.Ctx) error {
		// Render index
		return c.Render("index", fiber.Map{
			"Title": "Hello, World!",
		})
	})

	app.Get("/layout", func(c *fiber.Ctx) error {
		// Render index within layouts/main
		return c.Render("index", fiber.Map{
			"Title": "Hello, World!",
		}, "layouts/main")
	})

	log.Fatal(app.Listen(":3000"))
}

Using embedded file system (1.16+ only)

When using the // go:embed directive, resolution of inherited templates using django's {% extend '' %} keyword fails when instantiating the template engine with django.NewFileSystem(). In that case, use the django.NewPathForwardingFileSystem() function to instantiate the template engine.

This function provides the proper configuration for resolving inherited templates.

Assume you have the following files:

then

package main

import (
	"log"
	"embed"
	"net/http"

	"github.com/boomhut/fiber/v2"
	"github.com/gofiber/template/django"
)

//go:embed views
var viewsAsssets embed.FS

func main() {
	// Create a new engine
	engine := NewPathForwardingFileSystem(http.FS(viewsAsssets), "/views", ".django")

	// Pass the engine to the Views
	app := fiber.New(fiber.Config{
		Views: engine,
	})

	app.Get("/", func(c *fiber.Ctx) error {
		// Render descendant
		return c.Render("descendant", fiber.Map{
			"greeting": "World",
		})
	})

	log.Fatal(app.Listen(":3000"))
}

Register and use custom functions
// My custom function
func Nl2brHtml(value interface{}) string {
	if str, ok := value.(string); ok {
		return strings.Replace(str, "\n", "<br />", -1)
	}
	return ""
}

// Create a new engine
engine := django.New("./views", ".django")

// register functions
engine.AddFunc("nl2br", Nl2brHtml)

// Pass the engine to the Views
app := fiber.New(fiber.Config{Views: engine})

in the handler

c.Render("index", fiber.Map{
    "Fiber": "Hello, World!\n\nGreetings from Fiber Team",
})

./views/index.django

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"></head>
<body>
{{ nl2br(Fiber) }}
</body>
</html>

Output:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"></head>
<body>
Hello, World!<br /><br />Greetings from Fiber Team
</body>
</html>

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Engine

type Engine struct {

	// templates
	Templates map[string]*pongo2.Template
	// contains filtered or unexported fields
}

Engine struct

func New

func New(directory, extension string) *Engine

New returns a Django render engine for Fiber

func NewFileSystem

func NewFileSystem(fs http.FileSystem, extension string) *Engine

func NewPathForwardingFileSystem

func NewPathForwardingFileSystem(fs http.FileSystem, directory string, extension string) *Engine

NewPathForwardingFileSystem Passes "directory" to the template engine where alternative functions don't.

This fixes errors during resolution of templates when "{% extends 'parent.html' %}" is used.

func (*Engine) AddFunc

func (e *Engine) AddFunc(name string, fn interface{}) *Engine

AddFunc adds the function to the template's function map. It is legal to overwrite elements of the default actions

func (*Engine) Debug

func (e *Engine) Debug(enabled bool) *Engine

Debug will print the parsed templates when Load is triggered.

func (*Engine) Delims

func (e *Engine) Delims(left, right string) *Engine

Delims sets the action delimiters to the specified strings, to be used in templates. An empty delimiter stands for the corresponding default: {{ or }}.

func (*Engine) Layout

func (e *Engine) Layout(key string) *Engine

Layout defines the variable name that will incapsulate the template

func (*Engine) Load

func (e *Engine) Load() error

Load parses the templates to the engine.

func (*Engine) Parse

func (e *Engine) Parse() error

Parse is deprecated, please use Load() instead

func (*Engine) Reload

func (e *Engine) Reload(enabled bool) *Engine

Reload if set to true the templates are reloading on each render, use it when you're in development and you don't want to restart the application when you edit a template file.

func (*Engine) Render

func (e *Engine) Render(out io.Writer, template string, binding interface{}, layout ...string) error

Render will render the template by name

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL