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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top