En mis modelos, a menudo uso campos de texto que están destinados a contener grandes piezas de entrada con formato textil. Me gustaría ofuscar automáticamente cualquier dirección de correo electrónico que se ingrese en estos campos de texto, de modo que cuando se impriman en una plantilla no sean visibles para las arañas.¿Cómo puedo oscurecer las direcciones de correo electrónico contenidas en los campos de texto de 'entrada libre' en Django
¿Hay alguna manera inteligente de hacerlo?
Actualización:
Sobre la base de la respuesta de lazerscience más adelante, este fue el código que terminé usando. Puse el nombre del archivo codde_mailto.py y lo puse en un directorio templatetags, dentro de una aplicación tipo 'utilidades' que instalé en la mayoría de mis proyectos 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>
A continuación, utilizarlo en las plantillas de la siguiente manera:
{% load encode_mailto %}
{{"A bunch of text with an email address [email protected]"|encode_mailto }}
perfecto, Gracias. Actualicé mi pregunta con una descripción de cómo conseguí que este enfoque funcionara en mi proyecto. – bitbutter