我正在尝试使用 Snap 和 Heist 渲染模板。
我确定我的处理函数被正确调用(如果我用 替换处理函数的内容undefined,它会按预期失败。Debug.Trace.trace也可以按预期工作)。
这个处理函数由一行组成:render "template". 但由于某种原因,我得到了No handler accepted <url>错误而不是 atemplate not found或类似的东西。
我认为这里的问题是我将模板放在错误的目录中,但是无法知道在哪里搜索模板。所以我的问题是:
- 这个错误信息不是误导吗?它应该是这样的
template not found: template.tpl - 我在哪里可以知道在哪些目录中搜索模板?
我认为由创建的快照应用程序snap init是问题所在。我只对它进行了轻微的修改:
- 我又添加了一个字段来
App记录:_myapp :: Snaplet Myapp - 在
app初始化函数中,我添加了:n <- embedSnaplet "myapp" myapp myappInit然后将 n 传递给记录。 - 我创建了新文件
src/Myapp.hs。
以下是中的相关部分Myapp.hs:
myappInit = do
...
h <- nestSnaplet "" heist $ hesitInit "myapp_templates"
addRoutes routes
...
routes = [ ("/submit", submitHandler) ]
submitHandler = trace "rendering submit" $ render "submit"
但是由于某种原因,即使我rendering submit在转到时看到打印到控制台,我也会http://0.0.0.0:8000/myapp/submit收到No handler accepted "/hsnews/submit"作为 HTTP 响应的消息(而不是呈现的模板)。我有submit.tpl和_submit.tpl在snaplets/heist/myapp_templates.