Timwi
Timwi

Reputation: 66594

How to link to a static file in Hamlet?

I looked at a previous question that sounds like it’s the same question, but it seems to skip over a part that I must be missing.

I added the import Settings.StaticFiles line at the top of the handler file.

I copied a file called chunk.png into the static folder of the yesod project.

However, no matter what I try, I always get:

Not in scope: 'chunk_png'

I’ve tried adding staticSite "static" or $(staticSite "static") before the whamlet, but to no avail.

Here’s the full code:

module Handler.Foo where

import Import
import Data.List
import Settings.StaticFiles

getFooR :: Int -> Int -> Handler Html
getFooR param1 param2 = do
    staticSite "static"
    defaultLayout [whamlet|
        <img src=@{StaticR chunk_png}>
    |]

I’ve also tried staticFiles "static" (instead of staticSite) but that gives me the error:

Not in scope: 'staticFiles' Perhaps you meant 'staticSite' (imported from Settings.StaticFiles)

There is an entry for /static StaticR Static getStatic in config/routes.

Any ideas?

Upvotes: 4

Views: 357

Answers (1)

Timwi
Timwi

Reputation: 66594

The solution for me was to add

import Yesod.Static

at the top of the file, and

staticFiles "static"

before the handler function declaration, rather than inside of it.

Upvotes: 4

Related Questions