Web2py - Visualizzazioni

web2py framework utilizza Models, Controllers e Viewsnelle sue applicazioni. Include una sintassi Python leggermente modificata inViews per un codice più leggibile senza alcuna restrizione imposta dal corretto utilizzo di Python.

Lo scopo principale di un web2py Viewè incorporare il codice Python in un documento HTML. Tuttavia, affronta alcuni problemi, che sono i seguenti:

  • Escaping del codice Python incorporato in un documento HTML.
  • Segue un rientro basato su Python, che potrebbe influire sulle regole HTML.

Per sfuggire ai problemi, web2py utilizza i delimitatori {{..}} nella sezione di visualizzazione. I delimitatori aiutano a sfuggire al codice Python incorporato. Aiuta anche a seguire le regole di indentazione HTML.

Il codice incluso all'interno {{..}}i delimitatori includono codice Python non intenzionale. Poiché Python normalmente utilizza l'indentazione per delimitare blocchi di codice, il codice non intenzionale all'interno dei delimitatori dovrebbe essere mantenuto in modo corretto. Per ovviare a questo problema, web2py utilizza l'estensione“pass” parola chiave.

Il blocco di codice che inizia con una riga termina con i due punti e termina con una riga che inizia con pass.

Note - pass è una parola chiave Python, non è una parola chiave web2py.

Il codice seguente mostra l'implementazione della parola chiave pass:

{{
   if num > 0:
      response.write('positive number')
   else:
      response.write('negative number')
      pass
}}

Aiutanti HTML

web2py include una classe helper che può essere utilizzata per creare HTML programmaticamente. Corrisponde ai tag HTML, definiti "helper HTML".

Ad esempio:

[(A('Home', _href = URL('default', 'home')), False, None, []), ...]

Qui, A è l'helper corrispondente all'ancora <a>tag di HTML. Costruisce l'ancora HTML<a> tag a livello di codice.

Gli helper HTML sono costituiti da due tipi, vale a dire positional e named argomenti.

  • Positional gli argomenti vengono interpretati come oggetti contenuti tra i tag HTML open e close.

  • Named gli argomenti che iniziano con un trattino basso vengono interpretati come tag HTML.

Gli helper sono utili anche nella serializzazione delle stringhe, con l'estensione _str_e metodi xml. Ad esempio:

>>> print str(DIV(“hello world”))

Produzione

<div> hello world </div>

Note - Gli helper HTML forniscono una rappresentazione lato server del DOM (Document Object Model).

Aiutanti XML

XML è definito come un oggetto, che incapsula il testo che non deve essere sottoposto a escape. Il testo può contenere o meno un XML valido.

Ad esempio, per il codice indicato di seguito, potrebbe contenere JavaScript.

>>> print XML('<script>alert("unsafe!")</script>')

Produzione

<script> alert(“unsafe!”)</script>

Aiutanti incorporati

Ci sono molti helper integrati usati in web2py. Alcuni degli helper HTML incorporati sono elencati di seguito.

Nome Utilizzo Esempio
UN Questo helper viene utilizzato per creare collegamenti. Corrisponde al tag di ancoraggio
[
(A('Home', _href = URL('default', 'home')), False, None, []),
...]
B Questo aiutante aiuta a rendere il contenuto del testo in grassetto.
B('<hello>', XML('<i>world</i>'), _class = 'test', _id = 0)
CORPO Questo aiutante crea il corpo di una pagina. Include anche un operatore di moltiplicazione per aumentare il numero di interruzioni.
BR()
CODICE Esegue l'evidenziazione della sintassi per codice Python, C, C ++ e web2py. Questo helper ha anche la capacità di collegare una documentazione API.
CODE('print "hello"', language = 'python').xml()
CAMPO Crea un campo di input insieme alla sua etichetta.
FIELDSET('Height:', INPUT(_name = 'height'), _class = 'test')
TESTA Aiuta a taggare il tag <head> di una pagina HTML.
HEAD(TITLE('<hello>'))
IMG Aiuta a incorporare immagini per la data pagina HTML.
IMG(_src = 'http://example.com/image.png',_alt = 'test')

Aiutanti personalizzati

Questi helper vengono utilizzati per personalizzare i tag secondo i requisiti. web2py utilizza i seguenti helper personalizzati:

ETICHETTA

web2py utilizza TAG come generatore di tag universale. Aiuta a generare tag XML personalizzati. La sintassi generale è la seguente:

{{ = TAG.name('a', 'b', _c = 'd')}}

Genera il codice XML come: <name c = "d"> ab </name>

TAG è un oggetto e TAG.nameor TAG['name']è una funzione che restituisce una classe helper temporanea.

MENÙ

Questo helper crea un elenco degli elementi dell'elenco o dei valori degli elementi del menu, generando una struttura ad albero che rappresenta il menu. L'elenco delle voci di menu è in forma diresponse.menu. Ad esempio:

print MENU([['One', False, 'link1'], ['Two', False, 'link2']])

L'output verrà visualizzato come segue:

<ul class = "web2py-menu web2py-menu-vertical">
   <li><a href = "link1">One</a></li>
   <li><a href = "link2">Two</a></li>
</ul>

ABBELLIRE

Aiuta nella creazione di rappresentazioni di oggetti composti, inclusi elenchi e dizionari. Per esempio,

{{ = BEAUTIFY({"a": ["hello", XML("world")], "b": (1, 2)})}}

Restituisce un oggetto XML serializzabile in XML, con una rappresentazione del suo argomento costruttore. In questo caso, la rappresentazione sarebbe:

{"a": ["hello", XML("world")], "b": (1, 2)}

L'output verrà renderizzato come -

<table>
   <tr>
      <td>a</td>
      <td>:</td>
      <td>hello<br />world</td>
   </tr>
   
   <tr>
      <td>b</td>
      <td>:</td>
      <td>1<br />2</td>
   </tr>
</table>

Rendering DOM lato server

Il rendering lato server consente a un utente di pre-renderizzare lo stato iniziale dei componenti web2py. Tutti gli helper derivati ​​forniscono elementi di ricerca ed elementi per eseguire il rendering del DOM sul lato server.

Il elementrestituisce il primo elemento figlio che soddisfa una condizione specificata. D'altra parte,elementsrestituisce un elenco di tutti i figli corrispondenti. Entrambi usano la stessa sintassi.

Questo può essere dimostrato con il seguente esempio:

a = DIV(DIV(DIV('a', _id = 'target',_class = 'abc')))
d = a.elements('div#target')
d[0][0] = 'changed'
print a

L'output è dato come -

<div><div><div id = "target" class = "abc">changed</div></div></div>

Layout di pagina

Le visualizzazioni vengono utilizzate per mostrare l'output agli utenti finali. Può estendersi e includere anche altre visualizzazioni. Questo implementerà una struttura ad albero.

Esempio - “index.html” si estende a “layout.html” che può includere “menu.html” che a sua volta include “header.html”.

{{extend 'layout.html'}}
<h1>Hello World</h1>
{{include 'page.html'}}

Esempio

Nei capitoli precedenti abbiamo creato modelli e controller per il modulo azienda. Ora ci concentreremo sulla creazione della vista, che aiuta a rendere la visualizzazione dei dati.

Per impostazione predefinita, le visualizzazioni in web2py includono layout.html e index.html, che definisce la sezione complessiva di visualizzazione dei dati.

{{extend 'layout.html'}}
<h2>Companies</h2>

<table>
   {{for company in companies:}}
   <tr>
      <td>{{ = A(company.name, _href = URL('contacts', args = company.id))}}</td>
      <td>{{ = A('edit', _href = URL('company_edit', args = company.id))}}</td>
   </tr>
   
   {{pass}}
   <tr>
      <td>{{ = A('add company', _href = URL('company_create'))}}</td>
   </tr>
	
</table>

L'output sarà il seguente: