我创建了一个示例仓库here。
我们的想法是有一个最小的例子,使用Haskell模板系统Heist没有Snap,并使用其较新的编译Heist功能。
示例存储库不包括服务器,但代码最终将在服务器环境中使用。因此,我想做以下事情:
1.在服务器启动时预编译我的拼接
1.执行一个数据库调用,为REST路由加载给定视图的所有数据(想想GET /users)
1.将预编译的拼接应用于数据并将其粘贴到模板中
对于示例存储库,步骤1发生在main
的开始;步骤2用简单的阅读器monad代替;第三步是在main
的底部发生的。
这是最后一点(3)我正在努力。最后,我将使用Heist状态和模板的名称调用C.renderTemplate
。这个模板里面有一个标签,目前称为apply-content
(有点混乱,因为这是来自于interpeted Heist,但我想这不重要)。此apply-content
标记将被每个路由替换为不同的内容。为了示例存储库的目的,我想使用body.tpl
,它有一个body-greeting
标记,并用它替换index.tpl
中的apply-content
。
我现在唯一的想法是在调用renderTemplate
之前修改编译的拼接列表。但我在教程中没有找到任何这样的例子,在GitHub上也没有。所以我倾向于相信这不是它应该如何工作。
1条答案
按热度按时间g52tjvyc1#
这个问题的答案出奇的简单。
在编译模式下,您可以,也应该,
如果我们将
body.tpl
替换为:并更改
main.hs
,使其调用C.renderTemplate heistState "body"
而不是"index"
,我们得到所需的输出:在运行时生成的问候语,插入到body
模板中,该模板插入到index
模板中。您可以看到此commit中的更改