2

是否可以以并非每个模板都有自动生成的路线的方式使用 Snap/Heist?例如,假设我有一个名为“outline”的带有<apply-content/>标签的模板,以及一个名为“index”的模板,它调用<apply template="outline">. 我希望“索引”模板在路线“/”下可见,而“大纲”模板没有路线。我尝试了以下方法:

  • 调用heistInit并将两者都放入index.tpl目录outline.tpltemplates。这会自动为“大纲”创建一条路线。

  • 放入outline.tpl单独的目录并调用addTemplatesAt. 这也会自动为outline.

  • 使用空 Config调用heistInit'而不是heistInit,如下所示:

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

做最后一种方式意味着我必须手动添加路线,这没关系。但是,即使我可以使用render或提供模板,使用heistServeSingle时模板也看不到对方<apply>

我知道这感觉只是一个“小”问题,我可以让帮助模板可见,但对我来说这感觉很草率。我很想知道http://snapframework.com是否做了一些事情来解决这个问题,但似乎他们让他们的帮助模板可见,例如:http ://snapframework.com/nav

4

1 回答 1

0

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

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

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

可以使用的第二种方法是调用heistInit'osheistServe不会为您隐式添加。这应该不会影响您是否可以看到正在使用的模板,<apply>因为它不会通过路由来检索模板。我怀疑如果您在那里遇到问题,可能是因为您使用了 emptyHeistConfig,然后没有设置 scTemplateLocations 字段(http://hackage.haskell.org/package/heist-1.0.1.0/docs/Heist-Internal-Types .html#v:_scTemplateLocations)。

于 2016-11-10T07:17:01.710 回答