【问题标题】:In yesod (haskell), how do I load a plain html-formatted file (not a hamlet) as a widget?在 yesod (haskell) 中,如何将纯 html 格式的文件(不是小村庄)加载为小部件?
【发布时间】:2020-03-06 14:24:31
【问题描述】:

如何将纯 html 格式的文件(不是 hamlet 格式的文件)加载为小部件?换句话说,我正在寻找 html 等价物:

toWidget $(whamletFile "test.hamlet")

【问题讨论】:

    标签: haskell yesod shakespeare-text


    【解决方案1】:

    为此,您在处理函数中使用sendFile (see its definition)

    第一个参数是 Mime 类型,第二个是文件路径。

    例如,您可以编写如下代码:

    getMyFileR :: Handler ()
    getMyFileR = sendFile "text/html" "myfile.html"
    

    这是另一个例子。假设我有以下模型:

    Resource
        filename    FilePath
        mimetype    ContentType
    
        deriving    Typeable
    

    处理程序可能如下所示:

    resourceDirectory :: FilePath
    resourceDirectory = "resource"
    
    getResourceGetR :: ResourceId -> Handler ()
    getResourceGetR resourceId = do
        resource <- runDB $ get404 resourceId
    
        sendFile (resourceMimetype resource)
                 (resourceDirectory </> unpack (resourceFilename resource))
    

    编辑 2015-06-05

    sendFile 在低级别运行,而addScript$(widgetFile …) 在较高级别运行。

    $(widgetFile …) 在编译项目之前使用 TemplateHaskell 将您的 Hamlet/Cassius/Lucius/Julius 模板转换为实际的 Haskell 源代码。这同样适用于[hamlet|…|]

    addScriptRoute 一起使用,而sendFileFilePath 一起使用。这意味着addScript 将能够在编译时检测到丢失的文件。 sendFile 将在运行时检测丢失的文件。

    有一些工具可以将 Html 转换为 Hamlet:

    对于 Html 文件,addScript 的等效项没有意义:addScript 将生成一个 script 标记来告诉浏览器下载外部资源。这不适用于 Html 文件。

    【讨论】:

    • 我还是新手,但我使用的速记语法不是在不显式设置资源的情况下隐式引用文件吗?它似乎适用于小村庄文件。无论如何,一旦设置了资源处理程序,julius 就会拥有addScript,可以在资源上调用它来加载命名的外部 julius 资源。对于纯 html 资源,addScript 等价于什么?
    【解决方案2】:
    import Import
    import Text.Blaze.Html       (preEscapedToHtml)
    import Text.Shakespeare.Text (stextFile)
    
    myWidget :: Widget
    myWidget = toWidget . preEscapedToHtml $ $(stextFile "templates/some-file.html")
    

    【讨论】:

      猜你喜欢
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多