3

Snap と Heist を使用してテンプレートをレンダリングしようとしています。

ハンドラー関数が正しく呼び出されていると確信しています (ハンドラー関数の内容を に置き換えるとundefined、期待どおりに失敗します。Debug.Trace.traceまた、期待どおりに動作します)。

このハンドラー関数は、次の 1 行で構成されますrender "template"。しかし、何らかの理由No handler accepted <url>で、またはそのようなものの代わりにエラーが発生template not foundしています。

ここでの問題は、テンプレートを間違ったディレクトリに配置していることだと思いますが、テンプレートが検索された場所を知る方法はありません。だから私の質問は:

  1. このエラー メッセージは誤解を招くものではありませんか? それは次のようなものだったはずですtemplate not found: template.tpl
  2. テンプレートを検索するディレクトリはどこで確認できますか?

によって作成されたスナップアプリケーションが問題だと思いますsnap init。私はそれにわずかな変更を加えただけです:

  • App記録するフィールドをもう 1 つ追加しました。_myapp :: Snaplet Myapp
  • app初期化関数で、次を追加しました: n <- embedSnaplet "myapp" myapp myappInitn をレコードに渡しました。
  • 新しいファイルを作成しましsrc/Myapp.hsた。

の関連部分は次のMyapp.hsとおりです。

myappInit = do
    ...
    h <- nestSnaplet "" heist $ hesitInit "myapp_templates"
    addRoutes routes
    ...

routes = [ ("/submit", submitHandler) ]

submitHandler = trace "rendering submit" $ render "submit"

しかし、何らかの理由で、rendering submitに移動したときにコンソールに出力されているのに、 (レンダリングされたテンプレートではなく) HTTP 応答としてメッセージhttp://0.0.0.0:8000/myapp/submitを取得します。No handler accepted "/hsnews/submit"私はsubmit.tpl_submit.tplを持っていsnaplets/heist/myapp_templatesます。

4

2 に答える 2

2

1.: テンプレートのレンダリングには 2 種類のエラーが存在することに同意します。残念ながら私の知る限り、そうではありません。

2.:簡単な答え:使用されるディレクトリは、heistInit 関数に書き込まれます。例えば

h <- nestSnaplet "" heist $ heistInit "templates"

サブディレクトリを含め、「snaplets/heist/ templates/」内のすべてのファイルにアクセスできることを意味します。


長い答え:

heist ディレクトリ構造のデフォルトの動作は次のように機能します。 すべての .tpl ファイルは snaplet/heist/templates/ ディレクトリからアクセスできます。意味

addRoutes [("template", render "template")]

ファイルにアクセスします

snaplets/heist/templates/template.tpl

URLでアクセスできるもの

http://localhost:8000/template

サブディレクトリを使用することもできます。

addRoutes [("users", render "users/index")]
path = snaplets/heist/templates/users/index.tpl
url  = http://localhost:8000/users

この動作を変更するには、heistInit 関数を調整します。

ディレクトリ パスを「snaplets/heist/templates/」ではなく「snaplets/heist/」にしたいとします。

単純に変更します:

h <- nestSnaplet "" heist $ heistInit "templates"

これに:

h <- nestSnaplet "" heist $ heistInit ""

heistInit の引数は、tpl ファイルのディレクトリの場所です。したがって、必要に応じて調整できます。

これがあなたの質問に答えることを願っています。

于 2014-01-01T01:06:02.887 に答える