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