XHPy étend la syntaxe du langage de sorte que les fragments XML deviennent expressions Python valides.
Avantages
& Nbsp; * Simplicité: écrire la logique de l'interface utilisateur dans une syntaxe simple, expressif, sans la nécessité pour les modèles externes ou langages de templates.
& Nbsp; * Flexibilité: l'utilisation des expressions Python librement dans les balises XHPy, et vice-versa.
& Nbsp; * Sécurité: avantage de se échapper automatique de texte dans les balises XHPy.
& Nbsp; * Réutilisation: construire des composants réutilisables par sous-classement: x: élément.
Un exemple
Dans bar.py:
de xhpy.init importation register_xhpy_module
register_xhpy_module ('foo')
foo d'importation
Dans foo.py:
de xhpy.pylib import *
classe: ui: foo (: x: élément):
& Nbsp; la liste barre d'attribut
& Nbsp;% flux catégorie
& Nbsp; rendre def (auto):
& Nbsp; a =
& Nbsp; pour b dans self.getAttribute ('bar'):
& Nbsp; a.appendChild (
& Nbsp; retourner une
Imprimer
Nous pouvons maintenant exécuter bar.py comme un script Python normale:
$ Python bar.py
- 0
- 1
- 2
Mes Félicitations! Vous venez d'écrire votre premier extrait de XHPy.
Syntaxe
XHPy ajoute une nouvelle syntaxe pour Python. Ligne par ligne de temps de lecture!
de xhpy.init importation register_xhpy_module
Ce initialise XHPy et vous permet d'enregistrer des modules pour être interprétées comme XHPy.
register_xhpy_module ('foo')
Maintenant, le module de foo dans foo.py sera interprété comme XHPy lorsqu'ils sont importés. Si foo était un paquet, l'ensemble de ses sous-modules seront également enregistrés; ce qui est utile pour l'enregistrement des bibliothèques de l'interface utilisateur.
foo d'importation
Pour réellement utiliser XHPy, cependant, vous voudrez probablement la bibliothèque de base:
de xhpy.pylib import *
Maintenant, vous avez accès à tous les standards HTML 4.0 éléments, l': x: classe de base de l'élément (ce est ce que vous construisez des composants personnalisés sur le dessus de!), Et quelques utilitaires.
classe: ui: foo (: x: élément):
Est facile faire de nouveaux composants: il suffit de la sous-classe: x: élément. Pour votre classe composant à enregistrer, il doit commencer par: - ce qui distingue clairement vos composants de classes Python ordinaires.
attribuer liste bar
Ce est une déclaration d'attribut, ce qui signifie que: ui: foo bar permet attributs de
plus tard - comme XHP, XHPy utilise la syntaxe d'attribut XML.
catégorie% débit
Ce est une catégorie de déclaration -: ui: foo fait partie de la catégorie des flux de%. Les catégories sont surtout utiles comme un moyen d'identifier les éléments qui sont similaires sans utiliser l'héritage; par exemple, la balise en pylib.html a
enfants (PCDATA | flux%) *
ce qui indique que ses enfants doivent soit contiennent du texte ou être de la catégorie d'écoulement de%. (Donc, nous pouvons mettre
def render (auto):
Lorsque vous imprimez un: x: élément (ou appelez str sur elle), le rendu () méthode est invoquée; ce est là où vous mettez votre logique d'interface utilisateur.
a =
B dans self.getAttribute ('bar'):
& Nbsp; a.appendChild (
retourner une
Ici,
- qui vous permet de construire une liste non ordonnée sur une liste Python. Éléments HTML standard comme
- sont automatiquement rendus - sauf que, dans XHPy, vous pouvez utiliser des expressions Python dans les balises, de sorte que
{B}
est remplacé par la valeur de b. Notez l'utilisation de getAttribute () et appendChild ():
self.getAttribute ('bar')
récupère la valeur de la barre d'attribut (dans ce cas, la gamme (3)), alors que
a.appendChild ( - {b} )
- {b} comme un enfant d'un =
ajoute
XHPy repose en grande partie hors XHP; pour plus de détails sur ce dernier, voir le `wiki XHP
& Nbsp; * les noms de classe de XHPy peuvent être utilisés partout classes Python ordinaires peuvent;
& Nbsp; * Tags XHPy ignorer les espaces internes, mais à l'extérieur doivent obéir indentation et la ligne continuation règles.
Plus d'informations sur le dernier point:
def foo (href):
& Nbsp; retour
barre de def (href):
& Nbsp; retourner
& Nbsp;
sont valides, alors
def foo (href):
& Nbsp; retourner
& Nbsp;
& Nbsp;
ne est pas, car il introduit une dedent supplémentaire après
Comment ça marche?
Lorsque vous
xhpy.init d'importation
XHPy installe un crochet d'importation. Ce crochet pièges états d'importation ultérieures, les faisant passer dans un préprocesseur qui analyse un sur-ensemble de Python. Ce préprocesseur traduit balises XHPy et noms de classes pour valider Python, puis exécute le code traduit dans le module portée.
Ceci est similaire à la façon dont fonctionne XHP, sauf:
& Nbsp; * avec, par exemple, pythonenv, vous pouvez toujours utiliser XHPy même sans accès à des répertoires d'installation de packages de Python échelle du système;
. & Nbsp; * par défaut, Python compile bytecode .pyc fichiers de vos modules, de sorte que le prétraitement ne doit être fait une fois quand un module est d'abord importée
Exigences :
- Python
Commentaires non trouvées