【问题标题】:Nesting one template inside another with StringTemplate 4使用 StringTemplate 4 将一个模板嵌套在另一个模板中
【发布时间】:2012-01-23 06:16:15
【问题描述】:

我在理解如何将另一个模板嵌套在另一个模板中时遇到问题。例如,我有 3 个模板:application.stgwrapper.stgcore.stg

core.stg:

page(data1, data2) ::= <<
  <h1>$data1$</h1>
  <h1>$data2$</h1>
>>

包装器.stg:

page(data3, data4) ::= <<
  <h1>$data3$</h1>

  <!----- CORE.STG GOES HERE ------->

  <h1>$data4$</h1>
>>

application.stg:

   page(data7, data8) ::= <<
      <h1>$data7$</h1>

      <!----- WRAPPER.STG GOES HERE ------->

      <h1>$data8$</h1>
    >>

文档似乎暗示这是可能的(条件子模板部分),但很抱歉,我根本无法弄清楚语法。请帮帮我。

【问题讨论】:

标签: template-engine stringtemplate


【解决方案1】:

您可以使用每个模板创建一个完整的文件,并确保为其设置了 .stg 扩展名。 然后创建一个TemplateGroupFile 对象并设置属性data7data8 并告诉它在应用程序模板中启动。

core(data1, data2) ::= <<
  <h1>$data1$</h1>
  <h1>$data2$</h1>
>>

wrapper(data3, data4) ::= <<
  <h1>$data3$</h1>
  core(data3,data4)
  <h1>$data4$</h1>
>>

application(data7, data8) ::= <<
  <h1>$data7$</h1>
  wrapper(data7,data8)
  <h1>$data8$</h1>
>>

这是 C# 代码

TemplateGroupFile grp = new TemplateGroupFile(Template);
Template page_tpl = grp.GetInstanceOf(GroupName);
GroupName = "application";
page_tpl.Add("data7", yourData);
page_tpl.Add("data8", moreOfYourData);
File.WriteAllText(Path.Combine(dir, Path.GetFileName(outputFile)), page_tpl.Render());

【讨论】:

    猜你喜欢
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 2015-11-30
    • 2018-02-02
    • 2021-06-23
    • 1970-01-01
    相关资源
    最近更新 更多