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.
Questa è stata una grande spiegazione. Grazie mille :) –