Link zu einer statischen Datei von Hamlet
Frage
Ich experimentiere gerade mit Yesod, indem ich dem folge Tutorial über das Yesod -Wiki.
Zuerst habe ich eine Yesod -Anwendung verwendet yesod init
, und erstellte einen Root -Handler, der eine Widget -Datei aufgerufen hat homepage
:
getRootR = do
mu <- maybeAuth
defaultLayout $ do
h2id <- lift newIdent
setTitle "Home"
addWidget $(widgetFile "homepage")
Ich habe eine Bilddatei im statischen Verzeichnisanruf static/img/logo.png
Nach Berührung Settings/staticFiles.hs
, Ich habe es erfolgreich geschafft, diese Datei aus zu verknüpfen default-layout.hamlet
über
<img src=@{StaticR img_logo_png}
Das Problem tritt jetzt auf, da ich diese statische Datei in meine einbeziehen möchte homepage
Widget verwendet genau die gleiche Codezeile. Der folgende Fehler tritt bei der Zusammenstellung auf:
Handler/Root.hs:19:21:
Not in scope: `img_logo_png'
In the result of the splice:
$(widgetFile "homepage")
To see what the splice expanded to, use -ddump-splices
In the first argument of `addWidget', namely
`$(widgetFile "homepage")'
In the expression: addWidget ($(widgetFile "homepage"))
Meine Frage lautet also: Wie verknüpfe ich statische Ressourcen in Widgets, die mit definiert sind? widgetFile
, Und warum verhält es sich in der Standard -Layout -Vorlage unterschiedlich verhält?
Lösung
Sie müssen einen Import zu Handler/Root hinzufügen.
import Settings.StaticFiles
Wenn eine Hamlet -Datei sie erfordert, muss die Hamlet -Datei zuerst importieren. Der Grund, warum Standard-Layout.hamlet keine Änderungen erfordert, liegt darin, dass es irgendwo in I REGEN APPLICE.HS aufgerufen wird.