我正在尝试使用 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
.