Como desativar a codificação HTML quando se usa Context no Django

votos
14

Na minha aplicação Django Eu estou usando um modelo para a construção de corpo de e-mail, um dos parâmetros é url, note que há dois parametros do separados por e comercial na 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)

Após tornando-a produz: http://127.0.0.1/test?a=1&b=2

Observe o comercial é HTML codificado como & amp;. Uma maneira de contornar o problema é passar cada parâmetro separadamente ao meu modelo e construir a url no modelo, no entanto, eu gostaria de evitar fazer isso.

Existe uma maneira de desativar a codificação HTML de parâmetros de contexto ou, pelo menos, evitar a codificação de ampersands?

Publicado 26/10/2008 em 01:09
fonte usuário
Em outras línguas...                            


2 respostas

votos
19

Para desligá-lo para uma única variável, use 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)

Como alternativa, para transformar totalmente autoscaping fora do seu código Python, use o autoescapeargumento quando inicializar umContext :

c = Context({
   'foo': 'bar',
   'url': 'http://127.0.0.1/test?a=1&b=2',
}, autoescape=False)

O Como transformar [escapar automática HTML] off seção da documentação abrange algumas das opções no gabarito se você preferir fazê-lo lá.

Respondeu 26/10/2008 em 01:13
fonte usuário

votos
8

Ou apenas usar o filtro "seguro" no seu modelo.

Além disso, eu não posso enfatizar o suficiente o quanto é importante estar familiarizado com a documentação do Django; muitas perguntas comuns, como isso tem fácil de encontrar respostas e explicações ( como este ), e ler os documentos e ter uma ideia de como tudo funciona vai diminuir drasticamente a quantidade de tempo que você precisa gastar perguntar "por que ele faz que" e aumentar a quantidade de tempo que você gasta construindo coisas que funcionam da maneira que quiser.

Respondeu 26/10/2008 em 03:59
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more