在 Snap 中使用路线和 html (Heist)

Working with routes and html (Heist) in Snap

我在 my-snap-app/snaplets/heist/templatesmain.tplpage1.tplpage2.tplpage3.tpl)中有模板 (*.tpl)。 这是我的 Main.hs:

import Snap.Http.Server
import Snap.Core
import Snap.Snaplet
import Snap.Snaplet.Heist
import Snap.Util.FileServe
import Snap.Util.GZip
import Heist.Interpreted
import Heist

--.......

data App = App { _heist :: Snaplet (Heist App) }
makeLenses ''App

instance HasHeist App where 
  heistLens = subSnaplet heist

我怎样才能:

a) 让所有模板在我的网络应用程序中可用?意思是,我希望能够访问 page1.tplpage2.tplpage3.tpl localhost://page1localhost://page2localhost://page3。我是否应该 必须 每个 页面添加一个路由,或者我是否可以添加一个路由使它们可以一次性访问 [=39] =]?

2) main.tpl 是主模板(布局)。如何让 page[123] 使用 main.tpl 作为主布局模板?

Heist snaplet 有一个函数 serveHeist that acts a lot like serveDirectory。这将为 templates/ at routes 中的所有模板提供服务。黑线鳕有更多细节,例如。隐藏某些本身没有意义的模板。

要将不同的模板组合在一起,请将模板视为函数 - 您可以将它们应用于其他模板,结果本身就是一个模板。这些事情都发生在海斯特本身,而不是瞬间。

<apply>标签执行函数应用。参数是<apply>里面的内容,比如page1.tpl:

<apply>
  <h1>I'm a function parameter</h1>
</apply>

应用的函数是main.tpl,参数是<apply-content>:

<html><head></head>
  <body>
    <h1>Main template.</h1>
    <apply-content/>
  </body>
</html>

使用 <apply><apply-content> 执行函数应用程序并计算完整页面,这将在 /page1 路由中可用。

Heist Tutorial 中有更多解释。我想知道函数应用类比是否有助于记住更多抢劫案 API.