質問

私は現在、Yesodをフォローして実験しています Yesod wikiのチュートリアル.

最初に、YESODアプリケーションを使用しました yesod init, 、および呼ばれるウィジェットファイルをレンダリングするルートハンドラーを作成しました homepage:

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

静的ディレクトリ呼び出しに画像ファイルがあります static/img/logo.png

触れた後 Settings/staticFiles.hs, 、私はこのファイルをどこからリンクすることに成功しました default-layout.hamlet 経由

<img src=@{StaticR img_logo_png}

問題は、この静的ファイルを自分に含めたいので発生しました homepage ウィジェット、まったく同じコード行を使用します。コンパイル時に次のエラーが発生します。

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

だから私の質問は次のとおりです。 widgetFile, 、そしてなぜデフォルトのレイアウトテンプレートで異なる動作をするのですか?

役に立ちましたか?

解決

ハンドラー/root.hsにインポートを追加する必要があります:

import Settings.StaticFiles

Hamletファイルがそれを必要とする場合、そのHamletファイルを呼び出すHandler.hsファイルは、最初にそれをインポートする必要があります。 Default-layout.hamletが変更を必要としない理由は、それがapplication.hsのどこかに呼ばれているためです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top