flosch / pongo2

Django-syntax like template-engine for Go
https://www.schlachter.tech/pongo2
MIT License
2.87k stars 270 forks source link

Future topic and feature wishlist #242

Open flosch opened 4 years ago

flosch commented 4 years ago

Based on user input I put up a list of topics I'm considering for future pongo2 versions:

Feel free to add any ideas and wishes as comments below.

egeozcan commented 3 years ago

I'd love to see inline extends (like include but with slots)

base.tpl (not relevant but just to make it clear)

<html><body>
    {% block body %}{% endblock %}
</body></html>

modal.tpl (a reusable component with three slots)

<section class="modal">
    <header>{% block header %}{% endblock %}</header>
    <article>{% block body %}{% endblock %}</article>
    <footer>{% block footer %}{% endblock %}</footer>
</section>

page_with_modal.tpl:

{% extends "base.tpl" %}

{% block body %}
    Hello world!!
    <!--  so include also providing a slot mechanism like extends, enabling reusable components -->
    {% include "modal.tpl" %}
        {% block header %}Modal title{% endblock %}
        {% block body %}Lorem ipsum{% endblock %}
        {% block footer %}Modal footer{% endblock %}
    {% endinclude %}
{% endblock %}
egeozcan commented 2 years ago

@flosch hi there! after a year, I just wanted to check if you think what I suggested above would be good idea. if so, and you don't have time, maybe I can give it a go?

flosch commented 2 years ago

@egeozcan Is there any existing implementation of this feature in other well-known template engines?

egeozcan commented 2 years ago

@flosch

In Vue.js and Web Components, this is possible with named slots. In angular, projections are used, and in React, you can pass components as parameters and render them anywhere.

On the server side: Symfony has something similar with named slots. Laravel/Blade also has slots. Django has Slippers, and I was told that Django Components can do something similar but I've never used it.

My use case is, I want to create Alpine.js components on the server side, with injection points.

egeozcan commented 2 weeks ago

Just checking in after 2 years... Perhaps what I asked for didn't peak your interest, or you just don't have the time (I mean who does these days right?). Would it be welcome if I tried to add something like this myself and made a PR or would it be the best to maintain a fork (although it's still a question if I'll be able to implement it at all)?

Hugoreal2 commented 17 hours ago

Really think this project can reach alot of people, I wouldn't mind to fork this

flosch commented 17 hours ago

This project is currently rather in maintenance mode, but I'm planning to resume feature development at some point and overhaul a few thinks I've on my bucket list. However, it takes some time though. Having your topic @egeozcan still on my list as well.