2013-02-24 5 views
1

Y at-il une possibilité d'utiliser des filtres de gabarit dans Chameleon comme je suis habitué à Mako? En Mako on pourrait faire quelque chose commeFiltre Mako en Caméléon?

${s | filter} 

filter est une chaînes de mappage de fonction à des chaînes et Mako appliquées filter-s et délivre en sortie (après avoir échappé à des entités HTML). Donc, on pourrait facilement faire des choses comme

${s | nl2br} 

Je suis conscient que la façon de le faire Chameleon est Line Breaking in Chameleon. Mais j'ai plus d'applications pour ce filtre donc je me demande si quelque chose de similaire est supporté par Chameleon.

Répondre

1

Non, il n'y en a pas. Faites plutôt le traitement dans votre vue ou utilisez le code python dans vos expressions TALES.

0

La façon caméléon est

${nl2br(s)} 

Je fais comme ça

views.py

form helpers import nl2br 
def my_view(request): 
    return { 
     'nl2br':nl2br, 
    } 

template.pt

${structure: nl2br(s)} 
+0

Je ne suis pas sûr mais, cela ne fonctionne que si je désactive l'encodage des htmlentities de Chameleon, non? Ce n'est pas une bonne idée - au moins dans ma situation: -/ – born

+0

ajouter une structure: si la sortie doit être interprétée comme html – bismigalis

+0

juste comme un avertissement aux lecteurs plus tard: ajouter une structure à la sortie peut impliquer un bug de sécurité majeur. – born

1

Dans Chameleon, l'opérateur de tuyau ("| «) Opérateur signifie essayer, sauf, au lieu de « appliquer le filtre ».

Mais comme la langue d'expression est tout simplement Python, il ne devrait pas être nécessaire avec ce sucre syntaxique.

Aussi, Caméléon a une expression import: type qui peut vous aider à importer des fonctions d'aide:

<div tal:define="h import: helpers"> 
    ... 
    ${structure: h.nl2br(s)} 

Notez que si nl2br retourné un objet qui a mis en œuvre une méthode __html__(), Caméléon appellerait cette méthode pour produire la sortie, et vous auriez pas besoin structure: pour éviter le HTML -escapeCela dit, il est vrai que l'opérateur de filtre de Mako rend parfois le code du modèle plus lisible.