2011-10-19 5 views
11

J'expérimente actuellement avec Yesod en suivant le tutorial on the Yesod Wiki.Lien vers un fichier statique de Hamlet

D'abord, je créé une application yessod utilisant yesod init, et a créé un gestionnaire de racine qui rend un fichier widget appelé homepage:

getRootR = do 
mu <- maybeAuth 
defaultLayout $ do 
    h2id <- lift newIdent 
    setTitle "Home" 
    addWidget $(widgetFile "homepage") 

J'ai un fichier d'image dans l'appel répertoire statique static/img/logo.png

Après avoir touché Settings/staticFiles.hs, j'ai réussi à lier ce fichier de default-layout.hamlet via

<img [email protected]{StaticR img_logo_png} 

Le problème se produit maintenant que je veux inclure ce fichier statique dans mon widget homepage, en utilisant exactement la même ligne de code. L'erreur suivante se produit à la compilation:

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

Donc, ma question est la suivante: Comment lier les ressources statiques dans les widgets définis avec widgetFile, et pourquoi est-il se comporter différemment dans le modèle de mise en page par défaut?

Répondre

6

Vous devez ajouter une importation au gestionnaire/Root.hs:

import Settings.StaticFiles 

Si un fichier hameau exige alors quel que soit le fichier handler.hs qui appelle ce fichier hameau devra importer en premier. La raison pour laquelle default-layout.hamlet ne nécessite aucune modification est parce qu'il est appelé quelque part dans Application.hs je crois qui a des importations pour à peu près tout, y compris les choses statiques.

Questions connexes