flosch / pongo2

Django-syntax like template-engine for Go

Home Page:https://www.schlachter.tech/pongo2

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Who is using pongo2?

flosch opened this issue · comments

Hi everyone,

I'm aware that development on pongo2 slowed down over the last couple years as it has been declared as almost feature complete.

Recently I've been thinking about actively continuing development and add support for a bunch of new features other template engines (incl. Django's) came up with.

Before I continue invest more time into that I'd like to compile a list of projects/companies/individuals who actively use pongo2 in their applications. I not only want to take this list into account for my decision making of continuing development but also want to compile a show room/list of users and make that publicly available.

If you, your project or your company is using (or has been using) pongo2 feel free to add a comment with name & link. If you can provide an example of your use case, that'd be highly appreciated as well. (If I can use your company's/project's logo as well for the show room, please explicitly state so.) If you have any missing features or feedback I should consider, please add this to your comment.

Thanks everyone for your time and help!

JCA Solutions, using it for most of our server-side e-learning products, including https://trainingvault.net/ (used for the entire admin) and one of our LMS versions. Feel free to use our logo.

Personally I'd love to see more Jinja2 features in here, as the Python projects I've moved off of were mostly Jinja2-bound.

Good to hear these good news!

I have been using the project for my personal projects and all was fine so I can't say what I did not have in pongo2's functionality.

Got your email, and I don't mind. Actually I haven't managed to use pongo2 in a real world product yet. We use symfony a lot. And its template engine, twig. Which is very similar. I searched for a similar template engine in golang world and found this way back when.

I don't have much feedback to add. Maybe you could check out jinja2 and twig and see If they same any extra features you could add in pongo2.

Thanks for reaching out. I was interested in Pongo2 as a possible shared template language between Python and Go. We do some Python Flask web things from time to time at work. Since that time we're moving away from Go as we've found Python more flexible for most of our staff for content prep and rendering. If I do more Go development I'd be very interested in a template language that is well documented, known to the Python community and works with Go too. Teaching Go templates just didn't work for us. All the best, Robert

Embedded application Bitconf for Bitrix24 ERP system uses pongo2

https://www.bitrix24.com/apps/?app=ipkozlovzoom.zoom

Florian thank you for your great project!

Thanks for reaching, flosch.This is Buwei.

Before I ran into Golang world, I've been using Twig.php and twig.js in the real world projects. Indeed, when I switched to Golang, I searched your project pongo2, which inherit the same spirit of original Jinja2 template language. I usually use with integration with Gin and Fiber web framework, currently I'm looking for create custom adapter to generate email, and you made the API simple to work with. Big thanks.

FYI, I recently made a website for my company using pongo2's custom filter feature to calculate numbers based on input. e.g. ounce to grams, ..etc. (ref: https://risehill.tw)

@flosch Hello!
When I answered to your email, I didn't have any real feature request in mind.
I just found one that would be really useful for me and my company (and maybe others).
I'm using pongo2 with an HTML WYSIWYG editor.
It would be nice to be able to highlight "pongo2 syntax error".
It's currently reporting syntax error as "normal" error messages.
It's not very easy nor safe to try to parse the error message, and extract the line/column.
Is it possible to return a custom error type (that could be matched with errors.As()) containing more information about the syntax error ?

Proudly using pongo2 as Gosense blog template engine.

My blog is powered by gosense blog engine.

https://www.netroby.com

I have always used Pongo2 for all my personal projects.
I also found it useful as a lexer/parser.
It saved me from writing my own.

Hi I have used pongo2 for a number projects that made it into production (Two CRM solutions and an E-commerce site) and many side projects as well as internal tools. Unfortunately I can't share links or mention names, but unless a project must be built as SPA I use pongo2.

Hi, I know https://github.com/lxc/lxd/ uses it, e.g. for templating files in vm images.

Jaguar Network, we use pongo2 to manage grafana dashboards based on jinja2 templates.

I'm using it for my website:
https://www.mininoticias.com.ar/

I have a implemtation in python/Jinja2 which renders YAML and Latex and would like to migrate to golang, is I am interested in pongo2,

  • I would need configural delimeters, e.g.
        latex_jinja_env = jinja2.Environment(\
            block_start_string = '\BLOCK{',
            block_end_string = '}',
            variable_start_string = '\VAR{',
            variable_end_string = '}',
            comment_start_string = '\#{',
            comment_end_string = '}',
            line_statement_prefix = '%-',
            line_comment_prefix = '%#',
            trim_blocks = True,
            autoescape = False,
            loader = jinja2.FileSystemLoader("/"))

and for yaml runbooks:

        macro_jinja_env = Environment(\
            block_start_string = '#-MACRO-BLOCK',
            block_end_string = '-#',
            variable_start_string = '#-MACRO-',
            variable_end_string = '-#',
            comment_start_string = '#%#',
            comment_end_string = '#%#',
            line_statement_prefix = '#*#',
            line_comment_prefix = '#!#',
            trim_blocks = True,
            autoescape = False,
            loader = FileSystemLoader("."))

I would support for tests and coding ...

Not sure if it's interesting, but I have just created a repo here:
https://github.com/swisscom/pongo2-runner

It's a small CLI that uses pongo2 to render jinja2 like templates. Super useful IMHO as a substitute of envsubst.

For now it covers only our use case, which is to inject properly some environment variables, but in the future multiple sources can be added :)

At my company we are looking into using it for an email template renderer :)

edit: My company is @vendasta over in Canada

At my company we are looking into using it for an email template renderer :)

Thanks for letting me know! May I ask which company that is?

Our content management framework(CMF) is using Pongo2. It has not been released yet(but it's close). I have written appreciation on the doc(will be in other places also when release) https://digimaker.org/doc/#thanks .

Really nice template engine. And nice to hear new features coming. :)

We're using it for parts of our bare-metal provisioning process: https://github.com/ns1/waitron
We've added a custom tag and filter as well, which wasn't too painful.

WarnerMedia uses it as part of their Platform Technology's VOD / Clips workflow. We use it to template out JSON documents / API calls. Unfortunately I can't link anything as its all internal access only, but the platform is used across all WM brands so any clips you see on say HBO Max, Cartoon Network, CNN, NBAtv, internal WM sites etc. all have used pongo2 on the digital video side.

Flyclops uses it for our internal admin backends.

tryingadventure.com -- photography blog. Added a few custom tags.

I am currently partnering up with a company in Germany and together we built Murmel - a full-blown Web application that uses Pongo2 everywhere. I can't say how happy we were to find out about the language. At the beginning, we started out with Go's default templating engine, but we quickly realized that some parts quickly became unmaintainable.

Our Go app is very much based on Django's principles. Plus, we've had previous experience building Django apps. So, it was only natural that we ended up using a templating syntax that felt near and dear to our hearts.

Great job!

Using it for boardengine.io V2, running React JS Job Board
Thank you very much for your great lib

commented

https://c64g.com/
A commodore64 games site.

What would be the correct way to detect that an expected variable is missing in the input.

Example, the following runs without error in the Golang playground:

package main

import (
	"fmt"

	"github.com/flosch/pongo2"
)

func main() {
	// Compile the template first (i. e. creating the AST)
	tpl, err := pongo2.FromString("Hello {{ name|capfirst }}!")
	if err != nil {
		panic(err)
	}
	// Now you can render the template with the given
	// pongo2.Context how often you want to.
	out, err := tpl.Execute(pongo2.Context{"name1": "fred"})
	if err != nil {
		panic(err)
	}
	fmt.Println(out) // Output: Hello Fred!
}

The Algernon web server is using Pongo2:
https://github.com/xyproto/algernon

Spider Email Archiver uses Fiber as http server and pongo2 as html template engine. Clearly mentioned on the "Credits" page of its website:
https://spider-archiver.com/credits.html

Basecode, the tool I created and use in multiple projects for creating full-stack Java/Kotlin + React apps, heavily relies on Pongo2 for templating. Coming from Pebble in the JVM ecosystem, I could pretty much use the same templates I used on the JVM, which was a huge win :-) https://github.com/wnederhof/basecode