我正在尝试使用 Heist 模板系统创建动态链接。问题是链接显示为文本,而不是被解释为 html。有没有一种特定的方法可以用 Heist 创建像这样的动态列表?
构造链接的函数:
renderCategories :: Monad m => Db.Category -> I.Splice m
renderCategories (Db.Category catid catname catdesc) =
I.runChildrenWithText [ ("categoryId", T.concat $ ["<a href='http://localhost:8000/thread_home?cateid=", T.pack . show $ catid, "'>", T.pack . show $ catid, "</a>"])
, ("categoryName", catname)
, ("categoryDesc", catdesc)]
该标签在网页上显示为“http://localhost:8000/thread_home?cateid=1'>1”文本。来源显示如下:
<a href='http://localhost:8000/thread_home?cateid=1'>1</a>
我认为我需要让它打印实际的 < 和 > 但我不确定如何实现这一点。由于我目前正在运行 runChildrenWithText 来填充这个 Heist 模板,更改为只是 runChildrenWith 需要拼接而不是文本,所以我希望有一些方法可以在没有 '<' 和 '>' 的情况下 runChildrenWithText 被转换为 '<'和'>'。任何帮助表示赞赏!
编辑
我正在尝试使用以下方法手动创建链接:
renderCategories :: Monad m => Db.Category -> I.Splice m
renderCategories (Db.Category catid catname catdesc) =
I.runChildrenWith [ ("categoryId", return $ X.Element "a"[("href", "http://localhost")] $ X.TextNode (T.pack $ show catid))]
但是我遇到两个错误:
Couldn't match type `X.Node' with `[X.Node]'
Expected type: I.Splice m
Actual type: heist-0.11.1:Heist.Types.HeistT m m X.Node
In the expression:
return
$ X.Element "a" [("href", "http://localhost")]
$ X.TextNode (T.pack $ show catid)
和
Couldn't match expected type `[X.Node]' with actual type `X.Node'
In the return type of a call of `X.TextNode'
In the second argument of `($)', namely
`X.TextNode (T.pack $ show catid)'
我目前并不真正理解这些错误,感谢您提供任何帮助。
返回链接和普通文本的工作功能:
renderCategories :: Monad m => Db.Category -> I.Splice m
renderCategories (Db.Category catid catname catdesc) =
I.runChildrenWith [( "categoryId", return $ [X.Element "a" [("href", T.concat $ ["http://localhost:8000/thread_home?cateid=", T.pack $ show catid] )] [X.TextNode (T.pack $ show catid)] ] )
, ("categoryName", I.textSplice catname)
, ("categoryDesc", I.textSplice catdesc)]