我目前在处理程序功能中有一个非常大的降价文本。为了呈现它,我使用了来自whamlet
包的Text.Markdown.markdown
quasiquoter和markdown
:
let md :: L.Text
md = "#Some markdown stuff"
authLayout $
[whamlet|
<div .StaticContent>
#{markdown def md}
|]
文本中有一些硬编码链接,但我宁愿使用变量插值 我想把这个大文本放到外部文件中,读取它的内容(这是一个带占位符的降价),应用插值(最终降价转换为HTML),最后输出结果。我怎样才能做到这一点?
答案 0 :(得分:1)
好吧,最后我找到了非常简单的解决方案。
任何准引用都可以轻松切换到文件输入,而不是来自quoteFile
模块 1 的Language.Haskell.TH.Quote
函数的内联文本。让我们在Foundation
模块中描述以下函数:
import Language.Haskell.TH.Quote (QuasiQuoter, quoteFile)
import Text.Shakespeare.Text (st)
stFile :: QuasiQuoter
stFile = quoteFile st
现在我们可以在处理程序模块中使用这个新的准引号:
-- file: Handler.SomeHandler.hs
import Foundation (stFile)
import Text.Markdown (markdown)
import qualified Data.Text.Lazy as L
getSomeHandlerR :: Handler Html
getSomeHandlerR =
do let userName = "Guest" :: Text
-- | `interpolated` is a strict `Text`
interpolated = [stFile|text-input.md|]
md = markdown def (L.fromStrict interpolated)
defaultLayout [whamlet|<div .static-content>#{md}|]
-- file: text-input.md
# Welcome!
Hello, **#{userName}**!
这将产生以下内容:
<div class="static-content">
<h1>Welcome!</h1>
<p>Hello, <b>Guest</b>!</p>
这就是全部!
答案 1 :(得分:0)