Come disabilitare la codifica HTML quando si utilizza Context in django
-
04-07-2019 - |
Domanda
Nella mia applicazione django sto usando un modello per costruire il corpo dell'email, uno dei parametri è url, nota che ci sono due parametri separati da e commerciale nell'url.
t = loader.get_template("sometemplate")
c = Context({
'foo': 'bar',
'url': 'http://127.0.0.1/test?a=1&b=2',
})
print t.render(c)
Dopo il rendering produce: http://127.0.0.1/test?a=1&b=2
Nota che la e commerciale è codificata in HTML come " & amp; amp; " ;. Un modo per aggirare il problema è passare ciascun parametro separatamente al mio modello e costruire l'URL nel modello, tuttavia vorrei evitare di farlo.
C'è un modo per disabilitare la codifica HTML dei parametri di contesto o per lo meno evitare la codifica di e commerciali?
Soluzione
Per disattivarlo per una singola variabile, utilizzare mark_safe
:
from django.utils.safestring import mark_safe
t = loader.get_template("sometemplate")
c = Context({
'foo': 'bar',
'url': mark_safe('http://127.0.0.1/test?a=1&b=2'),
})
print t.render(c)
In alternativa, per disattivare totalmente l'escaping automatico dal tuo codice Python, utilizzare l'argomento autoescape
quando si inizializza un Contesto
:
c = Context({
'foo': 'bar',
'url': 'http://127.0.0.1/test?a=1&b=2',
}, autoescape=False)
Il Come attivare [HTML automatico escape] off la sezione della documentazione copre alcune delle opzioni in-template se preferisci farlo lì.
Altri suggerimenti
Oppure usa semplicemente " sicuro " filtro nel modello.
Inoltre, non posso sottolineare abbastanza quanto sia importante conoscere la documentazione di Django; molte domande comuni come questa hanno risposte e spiegazioni facili da trovare ( come questa ) e leggere i documenti e avere un'idea di come tutto funziona ridurrà drasticamente il tempo necessario per chiedere "perché lo ha fatto?" e aumenta il tempo che impieghi a costruire cose che funzionano nel modo che preferisci.