- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的第一个网站上使用 Yesod,并且我有一个新闻项目列表:
NewsItem
date UTCTime default=CURRENT_TIME
title String
content String
author String
在我的处理程序中检索:
newsitems <- runDB $ selectList [] [Desc NewsItemDate]
最终在我的模板中使用:
$if null newsitems
<p>No news.
$else
$forall Entity id entry <- newsitems
<article>
<h4>#{newsItemDate entry}
<p>#{newsItemContent entry}
但是我收到有关数据类型的错误:
Handler/Home.hs:20:11:
No instance for (Text.Blaze.ToMarkup
time-1.4:Data.Time.Clock.UTC.UTCTime)
arising from a use of `toHtml'
Possible fix:
add an instance declaration for
(Text.Blaze.ToMarkup time-1.4:Data.Time.Clock.UTC.UTCTime)
In the first argument of `toWidget', namely
`toHtml (newsItemDate entry_a6ev)'
In a stmt of a 'do' block:
toWidget (toHtml (newsItemDate entry_a6ev))
In the expression:
do { toWidget
((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
"<article><h4>");
toWidget (toHtml (newsItemDate entry_a6ev));
toWidget
((Text.Blaze.Internal.preEscapedText . Data.Text.pack)
"</h4>\
\<p>");
toWidget (toHtml (newsItemContent entry_a6ev));
.... }
所以我想我会继续添加到我的 Import.hs 中:
import Data.Time (UTCTime)
import Data.Time.Format (formatTime)
import Text.Blaze (ToMarkup, toMarkup)
import Text.Blaze.Internal (string)
import System.Locale (defaultTimeLocale)
-- format date as 26 July 2012
instance ToMarkup UTCTime where
toMarkup a = string (formatTime defaultTimeLocale "%e %B %Y" a)
它确实可以编译,但在浏览器中运行时给我一个错误:
Internal Server Error
PersistMarshalError "Expected UTCTime, received PersistText \"2012-08-30\""
所以我不确定如何解决这个问题,有什么想法吗?
编辑:该网站的源代码,以防需要或好奇:https://github.com/iaefai/socrsite
最佳答案
在不调查实际错误的情况下,我认为您的方法并不好。您很可能最终需要多种方式来格式化 UTCTime
,毕竟,该类型是用来存储时间的,而不仅仅是日期。通过提供 ToMarkup UTCTime
实例,您可以全局修复此问题。
我建议编写函数 renderAsDate::UTCDate -> HTML
、renderAsTime::UTCDate -> HTML
等并在模板中使用它们,例如#{renderAsDate(newsItemDate 条目)}
。
但这并不能解决运行时错误,该错误来自序列化层,并且可能独立于您的模板。
关于haskell - 在《哈姆雷特》中使用 UTCTime,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12275273/
我在我的第一个网站上使用 Yesod,并且我有一个新闻项目列表: NewsItem date UTCTime default=CURRENT_TIME title Strin
在《哈姆雷特》中,如何使用 #{...} 内部 IO 操作的结果? 例如: someIO :: IO String ----------------- $with stuff #{stuff} 失败并
我刚刚听说 Yesod 并开始阅读这本书。在莎士比亚的章节中,大约 3/4 下来,他们说...... “重载模式不适用于 Hamlet,仅适用于 Cassius、Lucius 和 Julius。Ham
我是一名优秀的程序员,十分优秀!