haskell - 抢夺 : why my template is not rendered?

标签 haskell haskell-snap-framework heist

我正在尝试使用 Snap 和 Heist 渲染模板。

我确信我的处理函数被正确调用(如果我用 undefined 替换处理函数的内容,它会按预期失败。 Debug.Trace.trace 也按预期工作)。

该处理函数由一行组成:render "template" 。但由于某种原因我得到 No handler accepted <url>错误而不是 template not found或类似的东西。

我认为这里的问题是我将模板放置在错误的目录中,但无法知道在哪里搜索模板。所以我的问题是:

  1. 此错误消息是否具有误导性?它应该类似于 template not found: template.tpl
  2. 我在哪里可以知道在哪些目录中搜索模板?

我认为 snap init 创建的 snap 应用程序是问题所在。我只对其做了一些微小的修改:

  • 我又向 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.tplsnaplets/heist/myapp_templates .

最佳答案

1.:我同意渲染模板应该存在两种不同类型的错误。遗憾的是,据我所知,情况并非如此。

2.: 简短回答: 使用的目录写在 heistInit 函数中。例如

h <- nestSnaplet "" heist $ heistInit "templates"

表示可以访问“snaplets/heist/templates/”中的所有文件,包括子目录。


长答案:

抢劫目录结构的默认行为如下: 所有 .tpl 文件都可以从 snaplet/heist/templates/目录访问。含义

addRoutes [("template", render "template")]

将访问该文件

snaplets/heist/templates/template.tpl

可以通过url访问

http://localhost:8000/template

您还可以使用子目录,例如:

addRoutes [("users", render "users/index")]
path = snaplets/heist/templates/users/index.tpl
url  = http://localhost:8000/users

要修改此行为,您可以调整 heistInit 函数。

假设您希望目录路径为“snaplets/heist/”而不是“snaplets/heist/templates/”

只需更改:

h <- nestSnaplet "" heist $ heistInit "templates"

对此:

h <- nestSnaplet "" heist $ heistInit ""

heistInit 的参数是 tpl 文件的目录位置。 因此您可以根据需要进行调整。

我希望这能回答您的问题。

关于haskell - 抢夺 : why my template is not rendered?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20863979/

相关文章:

haskell - 在 Snap 中使用路线和 html (Heist)

haskell - 为什么我的 "apply"标签在 Heist 0.11.0.1 中不再有效?

haskell - Splice 是否支持 Unicode?

performance - Haskell 中的编辑距离算法 - 性能调优

sorting - 如何按列表的总和和内部元素对列表列表进行排序?

haskell - 使用 Reflex Platform 编译带有本地包的堆栈项目

haskell - 依赖类约束的不明确类型变量

haskell - 在 snap 中将列表作为多个参数 URL 传递

performance - 如何提高 zipWith 在 Haskell 中的性能