XHPy strek Python sintaksis sodat XML fragmente geword geldig Python uitdrukkings.
Voordele
& Nbsp; * Eenvoud: skryf UI logika in 'n eenvoudige, ekspressiewe sintaksis sonder die behoefte vir eksterne templates of template tale.
& Nbsp; * Buigsaamheid: gebruik Python uitdrukkings vrylik binne XHPy tags, en andersom.
& Nbsp; * Sekuriteit: voordeel uit outomatiese ontsnapping van die teks binne XHPy tags.
& Nbsp; * Herbruikbaar Heid: herbruikbare komponente bou deur subclassing: x: element.
'n Voorbeeld
In bar.py:
van xhpy.init invoer register_xhpy_module
register_xhpy_module ('cat')
invoer cat
In foo.py:
van xhpy.pylib invoer *
klas: ui: cat (: x: element):
& Nbsp; kenmerk lys bar
& Nbsp; kategorie% vloei
& Nbsp; def lewer (self):
& Nbsp; n =
& Nbsp; vir b in self.getAttribute ('bar'):
& Nbsp; a.appendChild (
& Nbsp; terugkeer 'n
Druk
Ons kan nou bar.py as 'n normale Python script:
$ Luislang bar.py
- 0
- 1
- 2
Baie geluk! Jy het net geskryf jou eerste brokkie XHPy.
Syntax
XHPy voeg 'n paar nuwe sintaksis te Python. Reël vir reël herhaling tyd!
van xhpy.init invoer register_xhpy_module
Dit initialisatie XHPy en kan jy om te registreer modules moet vertolk word as XHPy.
register_xhpy_module ('cat')
Nou is die cat module in foo.py sal geïnterpreteer word as XHPy wanneer ingevoer. As cat was 'n pakket, al sy submodules sou ook geregistreer word; Dit is nuttig vir die registrasie van UI biblioteke.
invoer cat
Om werklik XHPy gebruik, maar jy sal waarskynlik wil hê die hoofbiblioteek:
van xhpy.pylib invoer *
Nou het jy toegang tot al die standaard HTML 4.0 elemente, die: x: element basis klas (dit is wat jy bou persoonlike items op die top van!), En 'n paar nuts.
klas: ui: cat (: x: element):
Die maak van nuwe komponente is maklik: net subklas: x: element. Vir u komponent klas om geregistreer te word, moet dit begin met: - dit baie duidelik onderskei jou komponente van gewone Python klasse.
kenmerk lys bar
Dit is 'n kenmerk verklaring, wat beteken dat: ui: cat laat bar eienskappe op
later op - soos XHP, XHPy gebruik XML kenmerk sintaksis.
kategorie% vloei
Dit is 'n kategorie verklaring -: ui: cat is deel van die% vloei kategorie. Kategorieë is hoofsaaklik nuttig as 'n manier van die identifisering van elemente wat soortgelyk is sonder die gebruik van erfenis; Byvoorbeeld, die tag in pylib.html het
kinders (pcdata |% vloei) *
wat aandui dat sy kinders moet óf bevat teks of wees van die% vloei kategorie. (So kan ons
def lewer (self):
Wanneer jy druk 'n: x: element (of bel str op dit), die lewer () metode word opgeroep; dit is waar jy sit jou UI logika.
a =
vir b in self.getAttribute ('bar'):
& Nbsp; a.appendChild (
terugkeer om 'n
Hier
- waarmee jy 'n On-geordende lys te bou van 'n Python lys. Standaard HTML-elemente soos
- word outomaties gelewer - behalwe dat, in XHPy, kan jy Python uitdrukkings gebruik binne tags, sodat
{B}
word vervang deur die waarde van b. Let op die gebruik van getAttribute () en appendChild ():
self.getAttribute ('bar')
haal die waarde van kenmerk bar (in hierdie geval, omvang (3)), terwyl
a.appendChild ( - {b} )
- {b} as 'n kind van 'n =
- en
voeg
XHPy is grootliks gebaseer af XHP; vir meer besonderhede oor die laasgenoemde, sien die `XHP wiki
& Nbsp; * XHPy klas name kan gebruik word op enige plek gewone Python klasse kan;
& Nbsp; * XHPy tags ignoreer interne witspasie, maar moet ekstern inkeping en lyn voortsetting reëls gehoorsaam.
Meer oor die laaste punt:
def cat (href):
& Nbsp; terugkeer
def bar (href):
& Nbsp; terugkeer
& Nbsp;
geldig, terwyl
def cat (href):
& Nbsp; terugkeer
& Nbsp;
& Nbsp;
is nie, want dit stel 'n ekstra dedent na
Hoe dit werk
Wanneer jy
invoer xhpy.init
XHPy installeer 'n invoer haak. Dit haak strikke daaropvolgende invoer state, hardloop hulle deur 'n voorverwerker wat ontleed n superset van Python. Dit voorverwerker vertaal XHPy tags en klas name geldig Python, dan voer die vertaal-kode in module omvang.
Dit is soortgelyk aan hoe XHP werk, behalwe:
& Nbsp; * met bv pythonenv, kan jy altyd gebruik XHPy selfs sonder toegang tot die stelsel-wye Python pakket installasie dopgehou;
. & Nbsp; * by verstek, Python stel bytecode .pyc lêers van jou modules, so die preprocessing moet net gedoen word sodra wanneer 'n module is die eerste ingevoerde
Vereistes :
- Python
Kommentaar nie gevind