Как отобразить Html алгебраический тип данных в Yesod

Я пытаюсь использовать CKEditor в моем приложении Yesod. Данные из CKEditor возвращаются на сервер через Textarea, затем я сохраняю их как Html в базе данных. Моя проблема в том, что я знаю, как отобразить алгебраический тип данных Html, как только я получу его из базы данных в обработчике. Я читал этот урок, но он будет отображать HTML только в виде большой длинной строки, а не в виде разметки.

Замечания: titleA а также contextA переменная, которую я хочу отобразить в article-local-display.contextA это Html алгебраический тип данных

PS: мне нужно преобразовать Html в деревню, чтобы сделать?

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
  title Text
  context Html
  time UTCTime
  deriving

Статья-местный display.hamlet

<h1>#{titleA}
<article>#{contexA}

1 ответ

Поэтому я изменил контекст с HTML на текст.

Article
  title Text
  context Text
  time UTCTime
  deriving

Потом добавил preEscapedText при использовании значения.

let contextA = preEscapedText $ articleContext article

Теперь он отображается правильно.

Другие вопросы по тегам