Pergunta

No meu aplicativo django, estou usando um modelo para construir o corpo de email, um dos parâmetros é URL, observe que existem dois parâmetros separados por ampeiros e no 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)

Depois de renderizá -lo: http://127.0.0.1/test?a=1&b=2

Observe que o AMPERSAND é HTML codificado como "&". Uma maneira de contornar o problema é passar em cada parâmetro separadamente para o meu modelo e construir o URL no modelo, no entanto, gostaria de evitar fazer isso.

Existe uma maneira de desativar a codificação HTML dos parâmetros de contexto ou, no mínimo, evitar a codificação de ampeiras e?

Foi útil?

Solução

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 desligar totalmente a criação automática do seu código Python, use o autoescape argumento ao inicializar um Context:

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

o Como desligar [HTML automático escape A seção da documentação abrange algumas das opções no tempo, se você preferir fazê-lo lá.

Outras dicas

Ou apenas use o filtro "seguro" em seu modelo.

Além disso, não posso enfatizar o suficiente como é importante estar familiarizado com a documentação de Django; Muitas perguntas comuns como essa têm respostas e explicações fáceis de encontrar (como este), e ler os documentos e ter uma ideia de como tudo funciona diminuirá drasticamente a quantidade de tempo que você precisa gastar, pergunte "Por que isso fez isso" e aumentará a quantidade de tempo que você gasta construindo coisas que funcionam da maneira que você deseja .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top