Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Perl templates with inheritance

Exists in the Perl world any template system with template inheritance?

Just checked in the wikipedia Comparison_of_web_template_engines (really incomplete list) - and here isn't listed any.

Inheritance = Supports the ability to inherit a layout from a parent template, separately overriding arbitrary sections of the parent template's content.

Mean something like python's Jinja2:

#body.html
<body>
   {% block content %}
   <!-- the content go here -->
   {% endblock %}
</body>

#hi.html
{% extends "body.html" %}
{% block content %}
<h1>Hi!</h1>
{% endblock %}

rendering hi.html gives

 <body>
 <h1>Hi!</h1>
 </body>

Don't looking for exact Jinja2 syntax, simply looking for any template engine from the perl world what supports inheritance. (not only plain includes - like Template::Toolkit)

Asking here because searching CPAN is a pain for words like "template inheritance" - shows thousands modules what not related to this question.

Ps: ... and it shouldn't be something like embedded perl - should be "user editable" allowing users builds own templates without compromise a whole system - therefore can't use Mason or HTML::Mason)

like image 844
novacik Avatar asked Jan 09 '14 10:01

novacik


2 Answers

I'll second the suggestion for Text::Xslate. Its syntax is even quite similar to your Jinja2 examples:

In layouts/main.tx:

...
<div id="page">
  : block sidebar -> { }
  <div id="content">
    : block header-> { <h1>Default Title</h1> }
    : block content -> { }
  </div>
</div>
...

In another template:

: cascade layouts::main
: override header -> {
<div id="header">
...
</div>
: }

: override content -> {
<div id="content-body">
...
</div>
: }
like image 105
Dave Sherohman Avatar answered Oct 03 '22 23:10

Dave Sherohman


A colleague recently started using Text::Xslate.

like image 36
choroba Avatar answered Oct 03 '22 21:10

choroba