2011-11-11 4 views
13

Vorrei conoscere i vantaggi dell'utilizzo di helper HTML in web2py anziché semplici elementi di markup HTML. Per fare un esempio, ho letto il seguente codice di markup HTML builder in un'applicazione web2py (rossastra):Quali sono i vantaggi della creazione di markup HTML con helper HTML in web2py?

{{=A(IMG(_src=URL(r=request,c='static',f='up.png')),_href=URL(r=request,f='vote',args=['up',item.id]))}} 

Scrivendo questo codice da risultati di markup HTML semplici in questo:

<a href="/reddish/default/vote/up/{{=item.id}}"><img src="/reddish/static/up.png"/></a> 

trovo il codice HTML semplice markup più facile da leggere. Ma mi piacerebbe sapere se ci sono dei benefici nell'utilizzo di helper HTML?

A proposito, un vantaggio che posso vedere a prima vista è che il codice HTML helper non richiede la scrittura del nome dell'app, ovvero reddish, esplicitamente. Oltre a questo, ci sono altri vantaggi nell'usare gli helper HTML?

risposta

19

In primo luogo, anche nel vostro secondo esempio, si dovrebbe fare:

<a href="{{=URL('vote', args=['up', item.id])}}"> 
<img src="{{=URL('static', 'up.png')}}"/></a> 

Utilizzare sempre la URL() aiutante di scrivere gli URL, anche nelle viste. Gestisce le riscritture in uscita e conosce l'app corrente (e il controller), quindi non è necessario includerli (il che significa che se si cambiano i loro nomi, tutti gli URL continueranno a funzionare). Inoltre, non è più necessario specificare request o utilizzare le parole chiave c e f (rossastro è una vecchia app).

Per quanto riguarda gli helper, la regola generale è usarli nel caso in cui sia necessario creare o manipolare l'HTML in un controller, modello o modulo, ma utilizzare un normale markup HTML (miscelato con Python, come nel secondo esempio) nelle viste. Un'eccezione, tuttavia, è quando è necessario creare una struttura HTML complessa nella vista. In tal caso, potrebbe essere più semplice manipolare gli helper in un singolo blocco di codice Python piuttosto che mescolare i normali tag HTML con Python. Ad esempio, se si dispone di dati in un elenco di dizionari (con chiavi 'F1', 'F2', 'F3') e si desidera creare una tabella HTML, si può fare:

{{=TABLE([TR(row['f1'], row['f2'], row['f3']) for row in rows])}} 

si potrebbe fare lo stessa cosa che mescola HTML e Python, ma sarebbe molto più lungo e disordinato.

Un altro grande vantaggio degli helper è che creano un server-side DOM che può essere manipolato nel codice Python. Gli helper che è più probabile creare nel codice del modello/controllore sono i moduli (tramite FORM, SQLFORM, Crud e il sistema Auth) e le tabelle (tramite SQLTABLE, SQLFORM.grid e Crud). Questi helper contengono altri helper, come tabelle, div e ul, e possono essere manipolati lato server prima di essere serializzati in HTML (for example).

Inoltre, alcune delle aiutanti hanno caratteristiche particolari che aggiungono funzionalità o rendono più facili da usare:

  • A: Stessi <a></a>, ma prende anche argomenti speciali per gestire i callback Ajax.
  • HTML: aggiunge automaticamente la stringa doctype.
  • INPUT, OPTION: prendere un argomento speciale value per impostare il valore corrente e gestire automaticamente l'impostazione degli attributi checked e selected, rispettivamente.
  • OL, UL, SELECT, TR, TBODY: Come le loro controparti HTML, tranne che convertono automaticamente gli argomenti senza nome (o elementi di una lista/tupla) che non sono aiutanti nelle elementi figlio appropriate (ad esempio, <li>, <option> , <td> e <tr>, rispettivamente). (L'esempio precedente tabella fa uso di questo fatto - il TR() converte automaticamente gli elementi individuali in separati TD 's.)

Infine, ci sono una serie di aiutanti che sono specializzati funzionalità:

  • BEAUTIFY: crea una rappresentazione HTML di oggetti composti.
  • CODE: un'alternativa a <pre></pre> che gestisce automaticamente l'evidenziazione del codice e la numerazione delle righe per diversi linguaggi di programmazione.
  • MARKMIN: converte il codice markmin in HTML.
  • MENU: Crea gli ul annidati da un elenco annidato di tuple.
  • TAG: Generatore di tag universale e parser HTML.
  • XML: incapsula il testo che non deve essere sfuggito o che deve essere disinfettato.

Vedere helpers documentation per ulteriori dettagli.

+0

Questa è stata una grande spiegazione. Grazie mille :) –