Qu'est-ce qu'un moyen propre d'utiliser différents modèles en fonction d'une classe d'objet? autre que buncha si les déclarationsModèle Mako en fonction de la classe d'objet?
Répondre
Vous pouvez faire un dict
, appelez type2templ
, avec des types (c.-à-classes) comme les clés, et mako.template.Template
instances comme les valeurs - puis
t = type2templ.get(type(theobj), default_templ)
... t.render() ...
Cela suppose que theobj
est une instance d'une classe nouveau-style (pas les classes "héritées" obsolètes, mieux évitées qui sont toujours les classes par défaut dans Python 2 - si vous les utilisez, vous devez définitivement mettre à niveau votre code vers new-style classes, mais en utilisant theobj.__class__
est un travail, si hackish, replacemen t pour type(theobj)
ici). default_templ
est une instance de modèle par défaut à utiliser pour "aucun des éléments ci-dessus" (si vous préférez avoir une exception lorsque theobj
est d'un type non reconnu, utilisez l'indexation de crochet au lieu de l'appel .get
).
Notez que cela ne (directement) « l'héritage de soutien » - si (par exemple) classe foo
cartes en type2templ
à modèle bar
, alors vous faire une sous-classe baz
de foo
mais n'enregistrent pas explicitement dans ce type2templ
modèle que ses instances doivent utiliser, vous obtiendrez le modèle par défaut pour les instances de baz
. La prise en charge de l'héritage est plus complexe - à moins que vous ne fassiez simplement de l'instance de modèle mako l'un des attributs de la classe, ce qui le rend trivial (theobj.thetempl
si vous nommez cet attribut thetempl
! -), mais je comprends pour séparer la vue de le modèle.
- 1. Pass variable Mako modèle
- 2. dans le modèle mako: fonction python appeler au sein de la chaîne html
- 3. tronquer une chaîne dans le modèle mako
- 4. Modèle dépendant de la classe Python?
- 5. Classe de modèle, spécialisation de fonction
- 6. Fonction d'appel Mako à partir d'une chaîne?
- 7. fonction membre modèle de classe modèle appelé de fonction de modèle
- 8. Modèles Mako utilisant des balises de modèle Django
- 9. Formulaire de recherche dans Google App Engine avec modèle Mako
- 10. Comment diviser la définition de la fonction ami modèle dans la classe modèle?
- 11. aucune fonction correspondante dans la classe de modèle
- 12. Comment déclarer la fonction de modèle en dehors de la déclaration de classe
- 13. "modèle de classe" et "classe de modèle"
- 14. Recherche de modèle en classe?
- 15. Fonction de modèle avec les paramètres de type dépendants dans la classe de modèle
- 16. en classe modèle
- 17. Fusionner la fonction de décoration en classe
- 18. Syntaxe C++ pour la spécialisation explicite d'une fonction de modèle dans une classe de modèle?
- 19. listes d'impression avec modèle Mako (Django Rejoignez tag)
- 20. classe modèle: cteur contre la fonction -> nouveau standard C++
- 21. Encodage JSON à Mako?
- 22. modèle de fonction C de -> le passage d'un modèle de classe comme modèle argument
- 23. Mako "Parenthèses manquantes dans% def"
- 24. faire une fonction statique/classe en dehors de la classe
- 25. Rognage Mako sortie
- 26. Le fait de contraindre la classe de modèle avec l'opérateur T * en passant comme argument T * d'un modèle de fonction
- 27. Types de retour de modèle/Cast en fonction du modèle
- 28. fonction d'ami dans la définition de modèle
- 29. Spécialisation de modèle de fonction à l'intérieur d'une classe modélisée
- 30. références Obtenir% def en python mako
Lorsque vous travaillez en Python, faire des choses différentes en fonction du type d'objet est presque toujours un défaut de conception. Peut-être devriez-vous pré-traiter vos données afin que le modèle puisse y accéder facilement? –
je vais le faire, je réalise juste ce que je pourrais faire mal – Timmy