【发布时间】:2012-02-11 11:48:24
【问题描述】:
在 perl 中是否有一个类似于 HTml::Template 的包,它接受一个 JSON 对象并将其映射到一个 HTML 模板文件?我正在使用 HTML::Template 构建一个 Web 应用程序,并且将从 Web 服务 API 接收 JSOn,如果我可以将此 JSOn 模板化为 HTML 而不是按照 HTML::Template 要求的确切方式进行操作,事情就会变得简单。
【问题讨论】:
在 perl 中是否有一个类似于 HTml::Template 的包,它接受一个 JSON 对象并将其映射到一个 HTML 模板文件?我正在使用 HTML::Template 构建一个 Web 应用程序,并且将从 Web 服务 API 接收 JSOn,如果我可以将此 JSOn 模板化为 HTML 而不是按照 HTML::Template 要求的确切方式进行操作,事情就会变得简单。
【问题讨论】:
HTML::Template 只接受一个由字符串、散列和数组组成的数据结构。 JSON 直接映射到它。
$template->param(myData => JSON::Any->new->decode($json_string));
【讨论】:
HTML::Template 是一个相当“简单”的模板引擎 - 我使用引号是因为它的简单性让您可以在来自 Model View Controller 架构的 view 部分中做任何您需要的事情。
但是,您不能在 HTML::Template 中执行任意 perl 代码。
另外,由于在JSON 中您可能拥有非常复杂的数据结构,我怀疑是否有任何合适的方法可以在您的模板中直接使用JSON。
我认为可能的唯一解决方案是让您使用 Perl 脚本来解析 JSON,创建一些“对象”并将它们传递给您的模板。你已经有了那个 perl 脚本 - 就是实例化你的 HTML::Template 对象的那个。
【讨论】:
好的,有点晚了,但是: HTML::Template 总是需要散列数组的散列等等。 并且您无法浏览参数存储。 如果你想这样做,你可以试试 HTML::Template::Compiled 它允许你这样做。
<tmpl_var some_hash.key.another_key[23] >
或使用其他分隔符:
[%= some_hash.key.another_key[23] %]
但请注意模块与 HTML::Template 的文档差异。
因此,您将 JSON 字符串解码为数据结构并将其传递给模板,然后您就可以访问结构深处某处的所有值。
【讨论】: