Web2py - Ansichten

web2py Framework verwendet Models, Controllers und Viewsin seinen Anwendungen. Es enthält eine leicht modifizierte Python-Syntax in derViews Für besser lesbaren Code ohne Einschränkungen für die ordnungsgemäße Verwendung von Python.

Der Hauptzweck eines web2py Viewbesteht darin, den Python-Code in ein HTML-Dokument einzubetten. Es gibt jedoch einige Probleme, die wie folgt lauten:

  • Escape von eingebettetem Python-Code in einem HTML-Dokument.
  • Nach dem Einrücken basierend auf Python, was sich auf HTML-Regeln auswirken kann.

Um den Problemen zu entkommen, verwendet web2py im Ansichtsbereich Trennzeichen {{..}}. Die Trennzeichen helfen dabei, den eingebetteten Python-Code zu umgehen. Es hilft auch beim Befolgen der HTML-Einrückungsregeln.

Der darin enthaltene Code {{..}}Trennzeichen enthalten unbeabsichtigten Python-Code. Da Python normalerweise Einrückungen verwendet, um Codeblöcke abzugrenzen, sollte der unbeabsichtigte Code innerhalb der Begrenzer ordnungsgemäß beibehalten werden. Um dieses Problem zu lösen, verwendet web2py die“pass” Stichwort.

Der Codeblock, der mit einer Zeile beginnt, endet mit einem Doppelpunkt und endet mit einer Zeile, die mit pass beginnt.

Note - pass ist ein Python-Schlüsselwort, es ist kein web2py-Schlüsselwort.

Der folgende Code zeigt die Implementierung des Schlüsselworts pass -

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

HTML-Helfer

web2py enthält eine Hilfsklasse, mit der HTML programmgesteuert erstellt werden kann. Es entspricht den HTML-Tags, die als „HTML-Helfer“ bezeichnet werden.

Zum Beispiel -

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

Hier, A ist der dem Anker entsprechende Helfer <a>Tag von HTML. Es erstellt den HTML-Anker<a> Tag programmatisch.

HTML-Helfer bestehen aus zwei Typen, nämlich positional und named Argumente.

  • Positional Argumente werden als Objekte interpretiert, die zwischen den HTML-Tags open und close enthalten sind.

  • Named Argumente, die mit einem Unterstrich beginnen, werden als HTML-Tag interpretiert.

Helfer sind auch nützlich bei der Serialisierung von Zeichenfolgen mit dem _str_und XML-Methoden. Zum Beispiel -

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

Ausgabe

<div> hello world </div>

Note - HTML-Helfer bieten eine serverseitige Darstellung des Document Object Model (DOM).

XML-Helfer

XML wird als Objekt bezeichnet, das Text einschließt, der nicht maskiert werden soll. Der Text kann gültiges XML enthalten oder nicht.

Für den unten genannten Code könnte er beispielsweise JavaScript enthalten.

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

Ausgabe

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

Eingebaute Helfer

In web2py werden viele integrierte Helfer verwendet. Einige der in HTML integrierten Helfer sind unten aufgeführt.

Name Verwendung Beispiel
EIN Dieser Helfer wird zum Erstellen von Links verwendet. Es entspricht dem Ankertag
[
(A('Home', _href = URL('default', 'home')), False, None, []),
...]
B. Dieser Helfer hilft dabei, den Inhalt des Textes fett zu machen.
B('<hello>', XML('<i>world</i>'), _class = 'test', _id = 0)
KÖRPER Dieser Helfer macht den Text einer Seite. Es enthält auch einen Multiplikationsoperator, um die Anzahl der Pausen zu erhöhen.
BR()
CODE Es führt eine Syntaxhervorhebung für Python-, C-, C ++ - und web2py-Code durch. Dieser Helfer kann auch eine API-Dokumentation verknüpfen.
CODE('print "hello"', language = 'python').xml()
FELDSET Es erstellt ein Eingabefeld zusammen mit seiner Bezeichnung.
FIELDSET('Height:', INPUT(_name = 'height'), _class = 'test')
KOPF Es hilft beim Markieren des <head> -Tags einer HTML-Seite.
HEAD(TITLE('<hello>'))
IMG Es hilft beim Einbetten von Bildern für die angegebene HTML-Seite.
IMG(_src = 'http://example.com/image.png',_alt = 'test')

Benutzerdefinierte Helfer

Diese Helfer werden verwendet, um die Tags gemäß den Anforderungen anzupassen. web2py verwendet die folgenden benutzerdefinierten Helfer:

ETIKETT

web2py verwendet TAG als universellen Tag-Generator. Es hilft beim Generieren von benutzerdefinierten XML-Tags. Die allgemeine Syntax lautet wie folgt:

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

Der XML-Code wird wie folgt generiert: <name c = "d"> ab </ name>

TAG ist ein Objekt und / TAG.nameoder TAG['name']eine Funktion, die eine temporäre Hilfsklasse zurückgibt.

SPEISEKARTE

Dieser Helfer erstellt eine Liste der Listenelemente oder der Werte der Menüelemente und generiert eine baumartige Struktur, die das Menü darstellt. Die Liste der Menüpunkte hat die Formresponse.menu. Zum Beispiel -

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

Die Ausgabe wird wie folgt angezeigt:

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

VERSCHÖNERN

Es hilft beim Erstellen von Darstellungen zusammengesetzter Objekte, einschließlich Listen und Wörterbüchern. Zum Beispiel,

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

Es gibt ein in XML serialisierbares XML-Objekt mit einer Darstellung seines Konstruktorarguments zurück. In diesem Fall wäre die Darstellung -

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

Die Ausgabe wird wie folgt gerendert:

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

Serverseitiges DOM-Rendering

Durch das serverseitige Rendern kann ein Benutzer den Anfangszustand von web2py-Komponenten vorab rendern. Alle abgeleiteten Helfer stellen Suchelemente und Elemente zum Rendern von DOM auf der Serverseite bereit.

Das elementGibt das erste untergeordnete Element zurück, das einer angegebenen Bedingung entspricht. Andererseits,elementsGeben Sie eine Liste aller übereinstimmenden Kinder zurück. Beide verwenden dieselbe Syntax.

Dies kann anhand des folgenden Beispiels demonstriert werden:

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

Die Ausgabe wird gegeben als -

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

Seitenlayout

Ansichten werden verwendet, um die Ausgabe den Endbenutzern anzuzeigen. Es kann sowohl erweitert als auch andere Ansichten enthalten. Dadurch wird eine baumartige Struktur implementiert.

Beispiel - “index.html” erstreckt sich auf “layout.html” was einschließen kann “menu.html” was wiederum beinhaltet “header.html”.

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

Beispiel

In den vorherigen Kapiteln haben wir Modelle und Steuerungen für das Unternehmensmodul erstellt. Jetzt konzentrieren wir uns auf die Erstellung der Ansicht, die beim Rendern der Anzeige von Daten hilft.

Standardmäßig enthalten die Ansichten in web2py layout.html und index.html, der den Gesamtabschnitt der Anzeige von Daten definiert.

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

Die Ausgabe wird wie folgt sein -