È necessario rendere diversi frammenti HTML in diversi punti all'interno di un modello di frazione

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

  •  27-10-2019
  •  | 
  •  

Domanda

nel mio 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}

Da una funzione di gestore, devo sostituire il ???? Sopra con alcuni contenuti HTML.

Come è fatto?

Grazie per qualsiasi input.

MODIFICARE:

Sto cercando funzionalità simili, ad esempio, i blocchi di modelli di Django. Posso definire un blocco all'interno di un modello e il gestore che utilizza questo modello per il rendering, può riempire i blocchi del modello con il contenuto necessario. In questo momento, Yesod ha effettivamente un singolo blocco nel corpo di un modello. che "definito" dalla chiamata ^{pageBody pc}. So di poter costruire l'output generato da pageBody In ogni caso voglio usare addWidget ecc., ma in questo momento dovrò produrre il mio <div id="header"> e <div id="content"> Anch'io e voglio evitarlo perché tutti i miei gestori dovranno produrre questi divÈ avere la stessa struttura di markup in tutte le pagine.

È stato utile?

Soluzione

Penso che la risposta sia definire una funzione oltre a DefaultLayout. L'unica cosa che è magica di DefaultLayout è che i subiti (ad esempio Auth) e i messaggi di errore lo usano per impostazione predefinita. Ma potresti definire un "MyDefaultLayout" che prende gli altri contenuti che desideri. Potresti anche definire una funzione helper che avvolge i blocchi extra in un singolo blocco e quindi lo passa a DefaultLayout.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top