Avec Dexterity
types de contenu, la manière canonique est d'utiliser le transformateur:Quelle est la manière canonique pour obtenir un texte du champ RichText avec Archétypes
from plone.app.textfield.interfaces import ITransformer
from plone.app.textfield.value import IRichTextValue
def get_text_field(obj):
"""Get text field in object on Dexterity."""
transformer = ITransformer(obj)
text = ''
if IRichTextValue.providedBy(obj.text): # Dexterity
text = transformer(obj.text, 'text/plain')
return text
Mais je ne peux pas trouver la manière canonique de le faire avec Archetypes
, le transformateur n'a pas fonctionné avec le raw
html, juste avec RichTextValue
objet.
Mon approche consiste à utiliser maintenant lxml.html
pour convertir html en texte, mais je ne sais pas si cela fonctionne comme il devrait être:
def get_text_field(obj):
"""Get text field in object on both, Archetypes and Dexterity."""
text = ''
try:
raw = obj.getText() # Archetypes
if raw != '':
from lxml import html
el = html.fromstring(raw)
text = el.text_content()
except AttributeError:
from plone.app.textfield.value import IRichTextValue
if IRichTextValue.providedBy(obj.text): # Dexterity
from plone.app.textfield.interfaces import ITransformer
transformer = ITransformer(obj)
text = transformer(obj.text, 'text/plain')
return text
Merci pour la réponse Mathias – rodfersou
De rien :-) – Mathias