Web2py - Vues

utilise le framework web2py Models, Controllers et Viewsdans ses applications. Il inclut une syntaxe Python légèrement modifiée dans leViews pour un code plus lisible sans aucune restriction imposée à une utilisation correcte de Python.

L'objectif principal d'un web2py Viewconsiste à incorporer le code python dans un document HTML. Cependant, il fait face à certains problèmes, qui sont les suivants -

  • Échappement du code python intégré dans un document HTML.
  • Après l'indentation basée sur Python, ce qui peut affecter les règles HTML.

Pour éviter les problèmes, web2py utilise des délimiteurs {{..}} dans la section vue. Les délimiteurs aident à échapper le code python intégré. Il aide également à suivre les règles HTML d'indentation.

Le code inclus dans {{..}}les délimiteurs incluent du code Python involontaire. Puisque Python utilise normalement l'indentation pour délimiter les blocs de code, le code involontaire dans les délimiteurs doit être conservé de manière appropriée. Pour résoudre ce problème, web2py utilise le“pass” mot-clé.

Le bloc de code commençant par une ligne se termine par deux points et se termine par une ligne commençant par pass.

Note - pass est un mot clé Python, ce n'est pas un mot clé web2py.

Le code suivant montre l'implémentation du mot clé pass -

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

Aide HTML

web2py inclut une classe d'assistance qui peut être utilisée pour créer du HTML par programmation. Il correspond aux balises HTML, appelées «HTML helpers».

Par exemple -

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

Ici, A est l'assistant correspondant à l'ancre <a>balise HTML. Il construit l'ancre HTML<a> taguer par programmation.

Les aides HTML se composent de deux types, à savoir positional et named arguments.

  • Positional Les arguments sont interprétés comme des objets contenus entre les balises HTML open et close.

  • Named les arguments commençant par un trait de soulignement sont interprétés comme une balise HTML.

Les helpers sont également utiles dans la sérialisation des chaînes, avec le _str_et méthodes xml. Par exemple -

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

Production

<div> hello world </div>

Note - Les assistants HTML fournissent une représentation côté serveur du modèle d'objet de document (DOM).

Assistants XML

XML est appelé un objet, qui encapsule du texte qui ne doit pas être échappé. Le texte peut ou non contenir du XML valide.

Par exemple, pour le code mentionné ci-dessous, il peut contenir du JavaScript.

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

Production

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

Assistants intégrés

Il existe de nombreux assistants intégrés utilisés dans web2py. Certains des assistants HTML intégrés sont répertoriés ci-dessous.

Nom Usage Exemple
UNE Cet assistant est utilisé pour créer des liens. Il correspond à la balise d'ancrage
[
(A('Home', _href = URL('default', 'home')), False, None, []),
...]
B Cet assistant aide à rendre le contenu du texte en gras.
B('<hello>', XML('<i>world</i>'), _class = 'test', _id = 0)
CORPS Cet assistant crée le corps d'une page. Il comprend également un opérateur de multiplication pour augmenter le nombre de pauses.
BR()
CODE Il effectue la coloration syntaxique du code Python, C, C ++ et web2py. Cet assistant a également la possibilité de lier une documentation API.
CODE('print "hello"', language = 'python').xml()
CHAMP Il crée un champ de saisie avec son étiquette.
FIELDSET('Height:', INPUT(_name = 'height'), _class = 'test')
TÊTE Il aide à baliser la balise <head> d'une page HTML.
HEAD(TITLE('<hello>'))
IMG Cela aide à incorporer des images pour la page HTML donnée.
IMG(_src = 'http://example.com/image.png',_alt = 'test')

Assistants personnalisés

Ces assistants sont utilisés pour personnaliser les balises selon les exigences. web2py utilise les helpers personnalisés suivants -

MARQUE

web2py utilise TAG comme générateur de balises universel. Il aide à générer des balises XML personnalisées. La syntaxe générale est la suivante -

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

Il génère le code XML sous la forme: <name c = "d"> ab </name>

TAG est un objet et TAG.nameou TAG['name']est une fonction qui renvoie une classe d'assistance temporaire.

MENU

Cet assistant fait une liste des éléments de liste ou les valeurs des éléments de menu, générant une structure arborescente représentant le menu. La liste des éléments de menu se présente sous la forme deresponse.menu. Par exemple -

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

La sortie sera affichée comme suit -

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

EMBELLIR

Il aide à créer des représentations d'objets composés, y compris des listes et des dictionnaires. Par exemple,

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

Il renvoie un objet XML sérialisable en XML, avec une représentation de son argument constructeur. Dans ce cas, la représentation serait -

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

La sortie sera rendue comme -

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

Rendu DOM côté serveur

Le rendu côté serveur permet à un utilisateur de pré-rendre l'état initial des composants web2py. Tous les helpers dérivés fournissent des éléments de recherche et des éléments pour rendre le DOM côté serveur.

le elementrenvoie le premier élément enfant correspondant à une condition spécifiée. D'autre part,elementsrenvoie une liste de tous les enfants correspondants. Les deux utilisent la même syntaxe.

Cela peut être démontré avec l'exemple suivant -

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

La sortie est donnée comme -

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

Mise en page

Les vues sont utilisées pour afficher la sortie aux utilisateurs finaux. Il peut également s'étendre et inclure d'autres vues. Cela implémentera une structure arborescente.

Exemple - “index.html” étend à “layout.html” qui peut inclure “menu.html” qui à son tour comprend “header.html”.

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

Exemple

Dans les chapitres précédents, nous avons créé des modèles et des contrôleurs pour le module entreprise. Maintenant, nous allons nous concentrer sur la création de vue, qui aide à rendre l'affichage des données.

Par défaut, les vues dans web2py incluent layout.html et index.html, qui définit la section globale d'affichage des données.

{{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 sortie sera la suivante -