Giter Club home page Giter Club logo

gonja's Introduction

gonja

gonja is a pure go implementation of the Jinja template engine. It aims to be as compatible as possible with the original python implementation.

Usage

As a library

Install or update using go get:

go get github.com/nikolalohinski/gonja/v2

As a terraform provider

This gonja library has been packaged as a terraform provider. For more information, please refer to the dedicated documentation.

Example

package main

import (
	"os"
	"fmt"

	"github.com/nikolalohinski/gonja/v2"
	"github.com/nikolalohinski/gonja/v2/exec"
)

func main() {
	template, err := gonja.FromString("Hello {{ name | capitalize }}!")
	if err != nil {
		panic(err)
	}

	data := exec.NewContext(map[string]interface{}{
		"name": "bob",
	})
	
	if err = template.Execute(os.Stdout, data); err != nil { // Prints: Hello Bob!
		panic(err)
	}
}

Documentation

Migrating from v1 to v2

As this project now aims to reproduce the behavior of the python Jinja engine as closely as possible, some backwards incompatible changes have been made from the initial draft and need to be taken into account when upgrading from v1.X.X. Moreover, please do note that v1.X.X versions are not maintained.

The following steps can be used as general guidelines to migrate from v1 to v2:

  • All references to gonja need to be changed from "github.com/nikolalohinski/gonja" to "github.com/nikolalohinski/gonja/v2"
  • The following top level global variables/functions have been removed/updated and need to be adjusted accordingly:
    • DefaultEnv function is now called DefaultEnvironment and its properties have changed. See gonja.go and exec/environment.go for details
    • FromCache function has been removed as caching logic was removed. If required, it can be done by implementing a custom Loader (see loaders/loader.go)
    • Globals is now referred to as DefaultContext
  • What was called a Statement is now referred to as ControlStructure to be closer to python's Jinja glossary and may require changes in consumer code
  • What was called Globals is now called GlobalFunctions to be closer to python's Jinja glossary and may require changes in consumer code
  • All non-python built-ins have been removed from gonja. They have been moved to the terraform-provider-jinja code base. They can be brought back as needed by adding the github.com/NikolaLohinski/terraform-provider-jinja/lib dependency, and updating the global variables defined in builtins/ with the available methods for each (see exec/environment.go for details)
  • The Execute method of the *exec.Template object now requires a io.Writer to be passed, to be closer to Golang's template package interface. However, the ExecuteToString method now exists and behaves exactly as the Execute method used to, so it can be used as drop-in replacement.

Limitations

  • format: format does not take python's string format syntax as a parameter, instead it takes Go's. Essentially {{ 3.14|stringformat:"pi is %.2f" }} is fmt.Sprintf("pi is %.2f", 3.14)
  • escape / force_escape: Unlike Jinja's behavior, the escape-filter is applied immediately. Therefore there is no need for a force_escape filter
  • Only subsets of native python types (bool, int, float, str, dict and list) methods have been re-implemented in Go and can slightly differ from the original ones

Development

Guidelines

Please read through the contribution guidelines before diving into any work.

Requirements

Tests

The unit tests can be run using:

ginkgo run -p ./...

Tribute

A massive thank you to the original author @noirbizarre for doing the initial work in https://github.com/noirbizarre/gonja which this project was forked from.

gonja's People

Contributors

nikolalohinski avatar noirbizarre avatar zatte avatar karakanb avatar nvartolomei avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.