XHPy rozšiřuje syntaxi Pythonu tak, že fragmenty XML nabývají platnosti Python výrazy.
Přednosti
& Nbsp; * Jednoduchost: napište logiku uživatelského rozhraní v jednoduchém, expresivní syntaxe bez nutnosti externího šablony nebo šablonovacího jazyků.
& Nbsp; * Flexibilita: použití Python výrazy volně uvnitř XHPy značky, a naopak.
& Nbsp; * Security: prospěch z automatického unikající textu v rámci XHPy tagy.
& Nbsp; * Opětné: vybudovat opakovaně použitelných komponent podle subclassing: x: prvek.
Příklad
V bar.py:
od xhpy.init dovozu register_xhpy_module
register_xhpy_module ("foo")
import foo
V foo.py:
od xhpy.pylib import *
třída: ui: foo (: x: element):
& Nbsp; atribut seznam bar
& Nbsp; category% průtoku
& Nbsp; def render (self):
& Nbsp; =
& Nbsp; pro B v self.getAttribute ("bar"):
& Nbsp; a.appendChild (
& Nbsp; návrat
Nyní můžeme spustit bar.py jako normální Python skriptu:
$ Python bar.py
- 0
- 1
- 2
Moc Gratuluji! Právě jste napsal svůj první úryvek XHPy.
Syntax
XHPy přidává některé nové syntaxe pro Python. Řádek po řádku přehrávání čas!
od xhpy.init dovozu register_xhpy_module
To inicializuje XHPy a umožňuje registrovat moduly musí být vykládán v XHPy.
register_xhpy_module ("foo")
Nyní foo modul foo.py bude interpretován jako XHPy při importu. Pokud foo byl balíček, všechny jeho submodulů bude rovněž zapsán; To je vhodné zejména pro registraci UI knihoven.
import foo
Chcete-li skutečně používat XHPy, ale budete pravděpodobně chtít jádro knihovny:
od xhpy.pylib import *
Nyní máte přístup ke všem standardním HTML 4.0 prvků: x: element základní třída (to je to, co budete stavět vlastní komponenty na vrcholu!), A některé nástroje.
třída: ui: foo (: x: element):
Tvorba nových součástí je snadné: stačí podtřída: x: element. Pro vaše třída složka má být registrována, musí začít s - to jasně odlišuje komponentů od běžných tříd Python.
seznam atributů bar
To je prohlášení atribut, což znamená, že: ui: foo umožňuje bar atributy
později - stejně jako XHP, XHPy používá syntaxi XML atributu.
kategorie% průtoku
Jedná se o kategorie prohlášení -: ui: foo je součástí kategorie% průtoku. Kategorie jsou vhodné především jako způsob identifikace prvků, které jsou podobné bez použití dědičnosti; Například, <> v pylib.html má
děti (pcdata |% flow) *
což ukazuje, že jeho děti musí buď obsahovat text, nebo by měl být v kategorii% průtoku. (Takže můžeme dát
def render (self):
Při tisku: x: element (nebo volejte str na to), render () metoda je vyvolána; to je místo, kde si dát svou logiku uživatelského rozhraní.
=
pro b ve self.getAttribute ("bar"):
& Nbsp; a.appendChild (
návrat
Zde
- , který vám umožní postavit výčtu ze seznamu Python. Standardní HTML prvky jako
- se automaticky poskytované - kromě toho, že v XHPy, můžete použít Python výrazy v rámci značky, takže
{B}
se nahrazuje hodnotu b. Všimněte si použití getAttribute () a appendChild ():
self.getAttribute ("bar")
načte hodnotu atributu bar (v tomto případě, rozsah (3)), přičemž
a.appendChild ( - {b} )
- {b} jako dítě =
- Python
- a
Dodává,
XHPy je z velké části založen off XHP; Pro více informací o druhé, viz `XHP wiki
& Nbsp; * Jména XHPy tříd mohou být použity kdekoliv běžných třídách může Python;
& Nbsp; * XHPy značky ignorovat vnitřní mezery, ale musí být navenek poslouchat odsazení a řada doplňkových pravidel.
Více informací o poslední bod:
def foo (href):
& Nbsp; návrat
def bar (href):
& Nbsp; návrat
& Nbsp;
platí, že
def foo (href):
& Nbsp; návrat
& Nbsp;
& Nbsp;
není, protože to představuje další dedent po >.
Jak to funguje
Když vás
import xhpy.init
XHPy nainstaluje import háček. Tento háček pasti Následující příkazy import, běží jim v průběhu preprocesor, který analyzuje podmnožinou Python. To preprocesor překládá XHPy značky a názvy tříd platné Python, pak provede přeložený kód v modulu rozsahu.
To je podobné, jak XHP funguje, s výjimkou:
& Nbsp; * s, například, pythonenv, můžete vždy použít XHPy i bez přístupu k instalaci Python balíček celého systému adresářů;
. & Nbsp; * ve výchozím nastavení, Python zkompiluje byteCode .pyc soubory z modulů, takže předzpracování jen je třeba provést jednou, když je modul první dovezený
Požadavky na :
Komentáře nebyl nalezen