【问题标题】:Working with routes and html (Heist) in Snap在 Snap 中使用路由和 html (Heist)
【发布时间】:2016-02-29 12:02:41
【问题描述】:

我在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 on localhost://page1localhost://page2localhost://page3。我应该必须每个页面添加一个路由,还是可以添加一个路由以使它们一次访问

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

【问题讨论】:

    标签: haskell haskell-snap-framework heist


    【解决方案1】:

    Heist snaplet 有一个函数serveHeist,它的作用很像serveDirectory。这将为模板/路由中的所有模板提供服务。黑线鳕有更多的细节,例如隐藏某些本身没有意义的模板。

    为了将不同的模板组合在一起,可以将模板想象为函数 - 您可以将它们应用到其他模板,结果本身就是一个模板。这些事情都发生在 Heist 本身,而不是一瞬间。

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

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

    正在应用的函数是main.tpl,参数是&lt;apply-content&gt;

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

    使用&lt;apply&gt;&lt;apply-content&gt; 执行函数应用并计算完整的页面,这将在/page1 路由中可用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      相关资源
      最近更新 更多