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

时间:2016-02-26 15:35:33

标签: haskell haskell-snap-framework heist

我在my-snap-app/snaplets/heist/templatesmain.tplpage1.tplpage2.tplpage3.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

page1.tpl

我怎么能:

a)在我的网络应用程序中提供所有模板?这意味着,我希望能够访问page2.tplpage3.tpllocalhost://page1   localhost://page2localhost://page3main.tpl。我是否必然每个页面添加路线?或者我是否可以添加路线以使其可以一次性全部

2)page[123]是主要模板(布局)。如何使main.tpl使用System.Data.OleDb.OleDbConnection newconn = new System.Data.OleDb.OleDbConnection(); try { string pathOfFileToCreate = "U:\\Visual Studio 2013\\Projects\\ANN\\FresnoDataCOC102-2.xlsx"; newconn.ConnectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0 Xml;HDR=YES"";", pathOfFileToCreate); newconn.Open(); var cmd = newconn.CreateCommand(); cmd.CommandText = "CREATE TABLE sheet1 (Date1 String/varhcar(100), PanEObserved DOUBLE, PanECalculated DOUBLE)"; //Check how to declare a varchar exactly. cmd.ExecuteNonQuery(); for (int i = 0; i < training; i++) // Sample Data Insert { int day = Convert.ToInt32(Convert.ToString(ds.Tables[0].Rows[i][ds.Tables[0].Columns.Count - 1]).Substring(0, 2)); int month = Convert.ToInt32(Convert.ToString(ds.Tables[0].Rows[i][ds.Tables[0].Columns.Count - 1]).Substring(3, 2)); int year = Convert.ToInt32(Convert.ToString(ds.Tables[0].Rows[i][ds.Tables[0].Columns.Count - 1]).Substring(6, 4)); DateTime date = new DateTime(year, month, day); String dateAux = date.ToString("dd/MM/yyyy"); cmd.CommandText = String.Format("INSERT INTO Sheet1 (Date1, PanEObserved, PanECalculated) VALUES({0},{1},{2})", "#" + dateAux + "#", ds.Tables[0].Rows[i][inputunits], outputs[i]); cmd.ExecuteNonQuery(); // Execute insert query against excel file. } } finally { conn.Close(); } 作为主布局模板?

1 个答案:

答案 0 :(得分:2)

Heist snaplet的函数serveHeistserveDirectory非常相似。这将为模板/路线中的所有模板提供服务。黑线鳕有更多细节,例如:隐藏某些自己没有意义的模板。

要将不同的模板组合在一起,请考虑类似函数的模板 - 您可以将它们应用于其他模板,结果本身就是模板。这些都发生在海斯特本身,而不是快照。

<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中有更多解释。我想知道功能 - 应用程序类比是否有助于记住更多的heist API。