Nei miei modelli uso spesso campi di testo che sono destinati a contenere grandi pezzi di input formattati in tessuto. Mi piacerebbe automaticamente offuscare tutti gli indirizzi e-mail che vengono inseriti in questi campi di testo, così che quando vengono stampati in un modello non sono visibili agli spider.Come posso nascondere gli indirizzi e-mail contenuti nei campi di testo "input gratuito" in Django
C'è un modo intelligente per farlo?
Aggiornamento:
in base alla risposta del lazerscience sotto, questo è stato il codice ho finito per usare. Ho chiamato il file encode_mailto.py e l'ho inserito in una directory templatetags, all'interno di un'app di tipo "utilities" che installo nella maggior parte dei miei progetti di 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>
Quindi utilizzare nel template come segue:
{% load encode_mailto %}
{{"A bunch of text with an email address [email protected]"|encode_mailto }}
Perfetto, Grazie. Ho aggiornato la mia domanda con una descrizione di come questo approccio ha funzionato nel mio progetto. – bitbutter