Question

J'expérimente actuellement avec Yesod en suivant tutoriel sur le Wiki Yessod.

D'abord, je créé une application utilisant yessod 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 le static/img/logo.png appel répertoire statique

Après avoir touché Settings/staticFiles.hs, je a réussi à lier ce fichier à partir default-layout.hamlet via

<img src=@{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"))

Alors ma question est: 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

Était-ce utile?

La solution

Vous devez ajouter une importation Handler / Root.hs:

import Settings.StaticFiles

Si un fichier hameau exige alors selon handler.hs fichier qui appelle ce fichier hameau devront importer en premier. La raison pour laquelle défaut-layout.hamlet ne nécessite pas de changement est parce qu'il est appelé quelque part je crois Application.hs qui a des importations pour à peu près tout, y compris les éléments statiques.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top