如何在不为每个模板自动创建路径的情况下使用Snap / Heist

时间:2016-09-01 17:59:26

标签: haskell haskell-snap-framework heist

是否可以使用Snap / Heist,使得并非每个模板都有自动生成的路径?例如,假设我有一个名为&#34; outline&#34;的模板。使用<apply-content/>标记和名为&#34; index&#34;的模板它调用<apply template="outline">。我想要&#34;索引&#34;模板在路线&#34; /&#34;和&#34;大纲&#34;下可见模板没有路线。我尝试过以下方法:

  • 致电heistInit并将index.tploutline.tpl放入templates目录。这会自动为&#34; outline&#34;。

  • 创建路线
  • outline.tpl放在单独的目录中并调用addTemplatesAt。这也会自动为outline

  • 创建路线
  • 使用空配置调用heistInit'而不是heistInit,如下所示:

    h <- nestSnaplet "" heist $ heistInit' "templates (Heist.emptyHeistConfig { Heist.Internal.Types._hcNamespace = "" })
    

做最后一种方式意味着我必须手动添加路线,这没关系。但即使我可以使用renderheistServeSingle投放模板,使用<apply>时模板也无法看到对方。

我知道这只是一个&#34;未成年人&#34;问题,我可以让帮助模板可见,但对我来说感觉马虎。我很想知道http://snapframework.com是否做了一些事情来解决这个问题,但看起来他们看到了帮助模板,例如:http://snapframework.com/nav

1 个答案:

答案 0 :(得分:0)

与Libby一样,预期的解决方案是使用下划线为模板名称添加前缀,以使其不被提供。我不确定她实际上在为这些模板提供服务时看到了什么。这行代码进行检查:

https://github.com/snapframework/snap/blob/master/src/Snap/Snaplet/HeistNoClass.hs#L320

如果这不起作用,请提交一个错误方法让我重现问题。

可以使用的第二种方法是调用heistInit' os heistServe不会隐式添加。这对于您是否可以使用<apply>查看模板没有影响,因为它不会通过路径来检索模板。我怀疑你是否遇到麻烦可能是因为你使用了emptyHeistConfig然后没有设置scTemplateLocations字段(http://hackage.haskell.org/package/heist-1.0.1.0/docs/Heist-Internal-Types.html#v:_scTemplateLocations)。