Dans mes modèles, j'utilise souvent des champs de texte qui sont destinés à contenir de gros morceaux d'entrée au format textile. Je voudrais masquer automatiquement les adresses e-mail saisies dans ces champs de texte, de sorte que lorsqu'elles sont imprimées dans un modèle, elles ne sont pas visibles par les robots.Comment puis-je masquer les adresses électroniques contenues dans les champs de texte « entrée libre » dans Django
Y at-il une façon intelligente de le faire?
Mise à jour:
Sur la base de la réponse de lazerscience ci-dessous, ce fut le code i fini par utiliser. J'ai nommé le fichier encode_mailto.py et l'ai placé dans un répertoire templatetags, à l'intérieur d'une application de type 'utilities' que j'installe dans la plupart de mes projets django.
import re
import random
from django.utils.safestring import mark_safe
from django import template
register = template.Library()
email_link_pat = re.compile(r'<a\s+href=("|\')?mailto:[^>]+>[^<]*</a>')
email_pat = re.compile(r'\b[-.\w][email protected][-.\w]+\.[a-z]{2,4}\b')
def get_script(m):
code_list = []
for c in m.group(0):
d = ord(c)
x = random.randint(0, d)
code_list.append("%d+%d" % (x, d-x))
return '<script type="text/javascript">document.write(String.fromCharCode(%s))</script>' % \
",".join(code_list)
def encode_mailto(text):
text = email_link_pat.sub(get_script, text)
text = email_pat.sub(get_script, text)
return mark_safe(text)
register.filter('encode_mailto', encode_mailto)</pre>
utiliser ensuite dans des modèles comme suit:
{% load encode_mailto %}
{{"A bunch of text with an email address [email protected]"|encode_mailto }}
Parfait, Merci. J'ai mis à jour ma question avec une description de comment j'ai obtenu cette approche fonctionnant dans mon projet. – bitbutter