Müssen mehrere HTML -Schnipsel an verschiedenen Stellen innerhalb einer Hamlet -Vorlage rendern

StackOverflow https://stackoverflow.com/questions/7337341

  •  27-10-2019
  •  | 
  •  

Frage

in meinem 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}

Aus einer Handler -Funktion muss ich die ersetzen ???? Oben mit einigen HTML -Inhalten.

Wie ist das gemacht?

Vielen Dank für jede Eingabe.

BEARBEITEN:

Ich suche nach Funktionen ähnlich wie beispielsweise die Vorlagenblöcke von Django. Ich kann einen Block in einer Vorlage definieren, und der Handler, der diese Vorlage zum Rendern verwendet, kann die Blöcke der Vorlage mit dem erforderlichen Inhalt ausfüllen. Derzeit hat Yesod effektiv einen einzelnen Block im Körper einer Vorlage. das "definiert" durch den Anruf ^{pageBody pc}. Ich weiß, dass ich die von erzeugte Ausgabe aufbauen kann pageBody Wie auch immer ich benutzen möchte addWidget usw., aber im Moment muss ich meine ausgeben <div id="header"> und <div id="content"> Auch und ich möchte das vermeiden, weil alle meine Handler diese ausgeben müssen div'Sbe die gleiche Markup -Struktur auf allen Seiten.

War es hilfreich?

Lösung

Ich denke, die Antwort besteht darin, neben Standardlayout eine Funktion zu definieren. Das einzige, was an defaultLayout magisch ist, ist, dass (z. B. Auth) und Fehlermeldungen standardmäßig verwendet werden. Aber Sie könnten ein "mydefaultLayout" definieren, das die anderen gewünschten Inhalte nimmt. Sie können sogar eine Helferfunktion definieren, die die zusätzlichen Blöcke in einen einzelnen Block einbindet und diese dann an Standardlayout weitergibt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top