ハムレットテンプレート内のさまざまな場所でいくつかのHTMLスニペットをレンダリングする必要があります
質問
私の中で default-layout.hamlet
:
!!!
<html lang="en">
<head>
<meta charset="utf-8">
<title>#{pageTitle pc}
^{pageHead pc}
<body>
<div id="main">
<div id="header">
????
<div id="content">
^{pageBody pc}
ハンドラー関数から、私は置き換える必要があります ????
上記のHTMLコンテンツ。
これはどのように行われますか?
ご意見をお寄せいただきありがとうございます。
編集:
たとえば、Djangoのテンプレートブロックに似た機能を探しています。テンプレート内のブロックを定義し、レンダリングにこのテンプレートを使用するハンドラーを定義でき、テンプレートのブロックを必要なコンテンツで埋めることができます。現在、Yesodは、テンプレートのボディに事実上単一のブロックを持っています。コールによって「定義された」 ^{pageBody pc}
. 。生成された出力を構築できることを知っています pageBody
どんな方法でも使用したい方法 addWidget
など、しかし今、私は自分の出力を出力する必要があります <div id="header">
と <div id="content">
また、私のハンドラーはすべてこれらを出力する必要があるので、それを避けたいです div
すべてのページで同じマークアップ構造を持つこと。
解決
答えは、defaultLayout以外の関数を定義することだと思います。 DefaultLayoutについて魔法のような唯一のことは、サブサイト(例えば、AUTH)とエラーメッセージがデフォルトでそれを使用することです。ただし、必要な他のコンテンツを撮影する「MyDefaultLayout」を定義できます。余分なブロックを1つのブロックにまとめるヘルパー関数を定義してから、それをdefaultLayoutに渡すこともできます。
所属していません StackOverflow