Как отключить кодировку HTML при использовании контекста в django
В моем приложении django я использую шаблон для создания тела электронной почты, одним из параметров является url, обратите внимание, что есть два параметра, разделенных амперсандом в 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)
После рендеринга он производит: http://127.0.0.1/test?a=1&b=2
Обратите внимание, что амперсанд HTML кодируется как "& amp;". Один из способов решения этой проблемы - передать каждый параметр отдельно моему шаблону и построить URL-адрес в шаблоне, однако я бы хотел избежать этого.
Есть ли способ отключить кодирование HTML параметров контекста или, по крайней мере, избежать кодирования амперсандов?
Ответы
Ответ 1
Чтобы отключить его для одной переменной, используйте 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)
В качестве альтернативы, чтобы полностью отключить autoescaping от вашего кода Python, используйте аргумент autoescape
при инициализации Context
:
c = Context({
'foo': 'bar',
'url': 'http://127.0.0.1/test?a=1&b=2',
}, autoescape=False)
Как отключить раздел [Автоматическое удаление HTML] в документации содержит некоторые опции в шаблоне, если вы предпочитаете делать это там.
Ответ 2
Или просто используйте "безопасный" фильтр в своем шаблоне.
Кроме того, я не могу достаточно подчеркнуть, насколько важно быть знакомым с документацией Django; многие общие вопросы, подобные этому, имеют легко найти ответы и объяснения (как этот), и читать через документы и получать представление о том, как все работает, значительно сократит время, которое вам нужно потратить, спросите "зачем оно это делало" и увеличивайте время, затрачиваемое на строительство вещей, которые работают так, как вы хотите.