Haskell 如何在YesSOD中呈现Html代数数据类型
我正在尝试在我的YesSOD应用程序中使用CKEditor。来自CKEditor的数据通过Textarea返回到服务器,然后我将其作为Haskell 如何在YesSOD中呈现Html代数数据类型,haskell,rich-text-editor,yesod,richtext,hamlet,Haskell,Rich Text Editor,Yesod,Richtext,Hamlet,我正在尝试在我的YesSOD应用程序中使用CKEditor。来自CKEditor的数据通过Textarea返回到服务器,然后我将其作为Html存储在数据库中。我的问题是,一旦我在处理程序中从数据库检索Html代数数据类型,我就知道如何显示它。我一直在阅读教程,但它只将Html显示为一个大的长字符串,而不是标记 注意:titleA和contextA是我希望在文章本地显示中显示的变量。 contextA是Html代数数据类型 PS:我需要将Html转换为hamlet才能渲染吗 module Hand
Html
存储在数据库中。我的问题是,一旦我在处理程序中从数据库检索Html代数数据类型,我就知道如何显示它。我一直在阅读教程,但它只将Html显示为一个大的长字符串,而不是标记
注意:titleA
和contextA
是我希望在文章本地显示中显示的变量。
contextA
是Html
代数数据类型
PS:我需要将Html转换为hamlet才能渲染吗
module Handler.Article where
import Import
import Data.Text (unpack)
import Data.Time (getCurrentTime)
import Data.String (fromString)
getArticleR :: Handler RepHtml
getArticleR = do
defaultLayout $ do
setTitle "Search For Article"
$(widgetFile "header")
$(widgetFile "article")
postArticleR :: Handler RepHtml
postArticleR = do
redirect ArticleR
getArticleLocalR :: Handler RepHtml
getArticleLocalR = do
articles <- runDB $ selectList ([] :: [Filter Article]) [Desc ArticleTime]
defaultLayout $ do
setTitle "Local Article"
$(widgetFile "header")
$(widgetFile "article-local")
getArticleLocalDisplayR :: ArticleId -> Handler RepHtml
getArticleLocalDisplayR articleId = do
article <- runDB $ get404 articleId
let titleA = articleTitle article
contextA = articleContext article
defaultLayout $ do
setTitle "Article"
$(widgetFile "header")
$(widgetFile "article-local-display")
getArticleLocalCreateR :: Handler RepHtml
getArticleLocalCreateR = do
defaultLayout $ do
setTitle "Create article"
addScript $ StaticR ckeditor_ckeditor_js
$(widgetFile "header")
$(widgetFile "article-local-create")
postArticleLocalCreateR :: Handler RepHtml
postArticleLocalCreateR = do
articleForm <- runInputPost $ ArticleForm <$> ireq textField "title" <*> ireq textareaField "editor1"
now <- liftIO getCurrentTime
let titleA = title articleForm
html = toHtml $ unTextarea $ context articleForm
_ <- runDB $ insert $ Article titleA html now
redirect ArticleLocalR
data ArticleForm = ArticleForm {
title :: Text,
context :: Textarea
}
deriving Show
article-local-display.hamlet
<h1>#{titleA}
<article>#{contexA}
{titleA}
#{contexA}
因此我将上下文从Html更改为文本
Article
title Text
context Text
time UTCTime
deriving
然后在使用值时添加preEscapedText
let contextA = preEscapedText $ articleContext article
现在它正确显示了。所以我将上下文从Html更改为文本
Article
title Text
context Text
time UTCTime
deriving
然后在使用值时添加preEscapedText
let contextA = preEscapedText $ articleContext article
现在它正确地显示出来了