Web2py - Vistas

Usos del framework web2py Models, Controllers y Viewsen sus aplicaciones. Incluye una sintaxis de Python ligeramente modificada en elViews para obtener un código más legible sin ninguna restricción impuesta al uso adecuado de Python.

El propósito principal de un web2py Viewes incrustar el código Python en un documento HTML. Sin embargo, enfrenta algunos problemas, que son los siguientes:

  • Escape de código Python incrustado en un documento HTML.
  • Siguiente sangría basada en Python, que puede afectar las reglas HTML.

Para escapar con los problemas, web2py usa delimitadores {{..}} en la sección de vista. Los delimitadores ayudan a escapar del código Python incrustado. También ayuda a seguir las reglas HTML de sangría.

El código incluido en {{..}}Los delimitadores incluyen código Python no intencionado. Dado que Python normalmente usa sangría para delimitar bloques de código, el código no intencionado dentro de los delimitadores debe mantenerse de manera adecuada. Para superar este problema, web2py utiliza la“pass” palabra clave.

El bloque de código que comienza con una línea termina con dos puntos y termina con una línea que comienza con pass.

Note - pass es una palabra clave de Python, no es una palabra clave de web2py.

El siguiente código muestra la implementación de la palabra clave pass:

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

Ayudantes HTML

web2py incluye una clase auxiliar que se puede utilizar para crear HTML mediante programación. Corresponde a las etiquetas HTML, denominadas "ayudantes HTML".

Por ejemplo

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

Aquí, A es el ayudante correspondiente al ancla <a>etiqueta de HTML. Construye el ancla HTML<a> etiquetar mediante programación.

Los ayudantes HTML constan de dos tipos, a saber positional y named argumentos.

  • Positional Los argumentos se interpretan como objetos contenidos entre las etiquetas HTML open y close.

  • Named los argumentos que comienzan con un guión bajo se interpretan como una etiqueta HTML.

Los ayudantes también son útiles en la serialización de cadenas, con la _str_y métodos xml. Por ejemplo

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

Salida

<div> hello world </div>

Note - Los ayudantes HTML proporcionan una representación del lado del servidor del Modelo de objetos de documento (DOM).

Ayudantes XML

XML se denomina objeto, que encapsula texto que no debe escaparse. El texto puede contener o no XML válido.

Por ejemplo, para el código mencionado a continuación, podría contener JavaScript.

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

Salida

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

Ayudantes incorporados

Hay muchos ayudantes integrados que se utilizan en web2py. Algunos de los ayudantes integrados de HTML se enumeran a continuación.

Nombre Uso Ejemplo
UN Este ayudante se utiliza para crear enlaces. Corresponde a la etiqueta de anclaje
[
(A('Home', _href = URL('default', 'home')), False, None, []),
...]
segundo Este ayudante ayuda a hacer que el contenido del texto esté en negrita.
B('<hello>', XML('<i>world</i>'), _class = 'test', _id = 0)
CUERPO Este ayudante crea el cuerpo de una página. También incluye un operador de multiplicación para aumentar el número de pausas.
BR()
CÓDIGO Realiza resaltado de sintaxis para código Python, C, C ++ y web2py. Este ayudante también tiene la capacidad de vincular una documentación de API.
CODE('print "hello"', language = 'python').xml()
FIELDSET Crea un campo de entrada junto con su etiqueta.
FIELDSET('Height:', INPUT(_name = 'height'), _class = 'test')
CABEZA Ayuda a etiquetar la etiqueta <head> de una página HTML.
HEAD(TITLE('<hello>'))
IMG Ayuda a incrustar imágenes para la página HTML dada.
IMG(_src = 'http://example.com/image.png',_alt = 'test')

Ayudantes personalizados

Estos ayudantes se utilizan para personalizar las etiquetas según los requisitos. web2py utiliza los siguientes ayudantes personalizados:

ETIQUETA

web2py utiliza TAG como generador de etiquetas universal. Ayuda a generar etiquetas XML personalizadas. La sintaxis general es la siguiente:

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

Genera el código XML como: <nombre c = "d"> ab </name>

TAG es un objeto y / TAG.nameo TAG['name']es una función que devuelve una clase auxiliar temporal.

MENÚ

Este ayudante crea una lista de los elementos de la lista o los valores de los elementos del menú, generando una estructura en forma de árbol que representa el menú. La lista de elementos del menú tiene la forma deresponse.menu. Por ejemplo

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

La salida se mostrará de la siguiente manera:

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

EMBELLECER

Ayuda a crear representaciones de objetos compuestos, incluidas listas y diccionarios. Por ejemplo,

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

Devuelve un objeto XML serializable a XML, con una representación de su argumento de constructor. En este caso, la representación sería:

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

La salida se representará como:

<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>

Representación DOM del lado del servidor

La renderización del lado del servidor permite al usuario renderizar previamente el estado inicial de los componentes de web2py. Todos los ayudantes derivados proporcionan elementos de búsqueda y elementos para representar DOM en el lado del servidor.

los elementdevuelve el primer elemento hijo que coincide con una condición especificada. Por otra parte,elementsdevuelve una lista de todos los hijos coincidentes. Ambos usan la misma sintaxis.

Esto se puede demostrar con el siguiente ejemplo:

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

La salida se da como -

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

Diseño de página

Las vistas se utilizan para mostrar la salida a los usuarios finales. Puede extenderse e incluir otras vistas. Esto implementará una estructura en forma de árbol.

Ejemplo - “index.html” se extiende a “layout.html” que puede incluir “menu.html” que a su vez incluye “header.html”.

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

Ejemplo

En los capítulos anteriores, creamos modelos y controladores para el módulo de empresa. Ahora, nos centraremos en la creación de vistas, lo que ayuda a representar la visualización de datos.

De forma predeterminada, las vistas en web2py incluyen layout.html y index.html, que define la sección general de visualización de datos.

{{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>

La salida será la siguiente: