gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:01:52 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com