2015-05-26 4 views
4

Как загрузить простой HTML-форматированный файл (а не файл в формате деревень) в качестве виджета? Другими словами, я ищу в HTML эквивалент:В yesod (haskell), как я могу загрузить простой HTML-форматированный файл (а не деревушку) в качестве виджета?

toWidget $(whamletFile "test.hamlet") 

ответ

6

Для этого используется sendFile в функции обработчика (see its definition)

Первый аргумент является Mime Type, а второй это путь к файлу ,

Например, вы могли бы кодировать что-то вроде:

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)) 

Edit 2015-06-05

sendFile работает на низком уровне, в то время как addScript или $(widgetFile …) работает на более высоком уровне.

$(widgetFile …) использует TemplateHaskell для преобразования ваших шаблонов Hamlet/Cassius/Lucius/Julius в настоящий исходный код Haskell перед компиляцией вашего проекта. То же самое относится к [hamlet|…|].

addScript работает с Route, а sendFile работает с FilePath. Это означает, что addScript сможет обнаруживать недостающие файлы во время компиляции. sendFile будет обнаруживать недостающие файлы во время выполнения.

Есть некоторые инструменты для преобразования Html Гамлета:

Эквивалент addScript для Html файлов не имеет смысла: addScript будет генерировать script тег, чтобы сообщить браузеру, чтобы загрузить внешний ресурс. Это не относится к Html-файлу.

+0

Я по-прежнему новичок в этом, но не является синтаксисом, который я использовал сокращенно для неявной ссылки на файл без явной настройки ресурса? Кажется, он работает для файлов hamlet. Независимо от того, как только настроил обработчик ресурсов, julius имеет 'addScript', который можно вызвать на ресурсе для загрузки именованного внешнего ресурса julius. Что эквивалентно 'addScript' для простого ресурса html? – daj

+0

@daj Я отредактировал ответ – zigazou

 Смежные вопросы

  • Нет связанных вопросов^_^