【问题标题】:Perl templates with inheritance具有继承的 Perl 模板
【发布时间】:2014-01-09 10:58:19
【问题描述】:

在 Perl 世界中是否存在任何具有模板继承的模板系统?

刚刚查看了维基百科Comparison_of_web_template_engines(确实不完整的列表)-这里没有列出任何内容。

继承 = 支持从父级继承布局的能力 模板,分别覆盖父级的任意部分 模板的内容。

意思是类似于 python 的 Jinja2:

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

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

渲染hi.html 给出

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

不要寻找确切的 Jinja2 语法,只需寻找 perl 世界中支持继承的任何模板引擎。 (不仅是普通的包含——比如 Template::Toolkit)

在这里询问是因为搜索 CPAN 对“模板继承”之类的词很痛苦 - 显示数千个模块与此问题无关。

Ps: ... 而且它不应该像嵌入式 perl - 应该是“用户可编辑的”,允许用户在不损害整个系统的情况下构建自己的模板 - 因此不能使用 Mason 或 HTML::Mason )

【问题讨论】:

  • 不知道它是否支持您对模板继承的确切定义,但Template Toolkit 有一些很好的功能,可以重用组件和从多个文件组合模板。
  • 为什么 Template Toolkit 的 include/process/wrapper 对你没有帮助?
  • @PseftiS 就像:“你为什么使用 perl 对象继承”而不仅仅是require '/some/file.pl' ;) ;)。大多数情况下,区别仅在于祝福...

标签: perl templates inheritance


【解决方案1】:

我将支持Text::Xslate 的建议。它的语法甚至与您的 Jinja2 示例非常相似:

layouts/main.tx:

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

在另一个模板中:

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

: override content -> {
<div id="content-body">
...
</div>
: }

【讨论】:

  • 谢谢,去检查一下... ;)
【解决方案2】:

一位同事最近开始使用Text::Xslate

【讨论】:

    【解决方案3】:

    Template::Jade,Jade 到 perl 的端口。

    parent.jade

    doctype html
    html
      head
        title Jade template
      body.class
        p#id_name
          block content
    

    child.jade

    extends parent
    
    block content
      p.
        This is a test.
        This is a test.
        This is a test.
    

    【讨论】:

      【解决方案4】:

      DTL::Fast 是我的Django templates 的 Perl 实现,带有继承和其他东西。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多