Come faccio ad aggiungere contenuto prima di </body> nella pagina estesa?(Modelli KID)

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

  •  22-09-2019
  •  | 
  •  

Domanda

Ho master.kid (semplificato):

<html>
<head py:match="item.tag == 'head'">
  <title>My Site</title>
</head>
<body py:match="item.tag == 'body'">
  <h1>My Site</h1>
  <div py:replace="item[:]"></div>
  <p id="footer">Copyright Blixt 2010</p>
</body>
</html>

E miapagina.kid:

<html>
<head></head>
<body>
  <p>Hello World!</p>
</body>
</html>

Ora voglio che sia possibile aggiungere più contenuti prima del file </body> tag nell'HTML risultante, specifico per mypage.kid.

Fondamentalmente il risultato dovrebbe essere qualcosa di questo:

<html>
<head>
  <title>My Site</title>
</head>
<body>
  <h1>My Site</h1>
  <p>Hello World!</p>
  <p id="footer">Copyright Blixt 2010</p>
  <script type="text/javascript">alert('Hello World!');</script>
</body>
</html>

IL <script> il tag deve essere specificato in mypage.kid.Va bene se devo modificare master.kid in facoltativamente supportare contenuti aggiuntivi prima del </body> tag, ma qual è il contenuto ha da specificare in mypage.kid.

All'inizio ho pensato di aggiungere un elemento prima di </body> tagga in master.kid con py:match="item.tag == 'bodyend'" funzionerebbe.Il problema è che utilizza la posizione dell'elemento in mypage.kid e non la posizione dell'elemento che fa py:match.Quindi se metto il <bodyend> etichetta prima </body> in mypage.kid, viene importato prima <p id="footer">, e se lo metto qui sotto </body> resterà lì.

Come faccio a configurare master.kid e mypage.kid per supportare l'aggiunta di contenuti immediatamente prima del file </body> etichetta?

È stato utile?

Soluzione

La migliore soluzione che ho trovato è la seguente:

maestro.bambino:

<html>
<head py:match="item.tag == 'head'">
  <title>My Site</title>
</head>
<body py:match="item.tag == 'body'">
  <h1>My Site</h1>
  <div py:replace="item[:]"></div>
  <p id="footer">Copyright Blixt 2010</p>
  <div py:if="defined('body_end')" py:replace="body_end()"></div>
</body>
</html>

miapagina.kid:

<html>
<head></head>
<body>
  <p>Hello World!</p>
  <div py:def="body_end()" py:strip="True">
    <script type="text/javascript">alert('Hello World!');</script>
  </div>
</body>
</html>

La pagina master.kid verifica la presenza di una variabile definita come body_end, e se esiste una variabile del genere, la chiamerà, sostituendo il contenuto dell'elemento precedente </body> (altrimenti non produrrà nulla).

Qualsiasi pagina che deve prima generare contenuti </body> definirà il body_end funzione utilizzando py:def="body_end()".IL py:strip="True" è lì per rimuovere l'involucro <div>.

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