django에서 컨텍스트를 사용할 때 HTML 인코딩을 비활성화하는 방법
-
04-07-2019 - |
문제
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입니다. 문제의 한 가지 방법은 각 매개 변수를 내 템플릿으로 별도로 전달하고 템플릿에 URL을 구성하는 것입니다. 그러나 그렇게하지 않으려 고합니다.
컨텍스트 매개 변수의 HTML 인코딩을 비활성화하거나 최소한 앰퍼 샌드의 인코딩을 피하는 방법이 있습니까?
해결책
단일 변수를 끄려면 사용하십시오. 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)
또는 Python 코드에서 자동 범위를 완전히 끄려면 사용 autoescape
초기화시 인수 a Context
:
c = Context({
'foo': 'bar',
'url': 'http://127.0.0.1/test?a=1&b=2',
}, autoescape=False)
그만큼 자동 HTML 이스케이프]를 끄는 방법 문서의 섹션에서는 오히려 만약 당신이 그곳에서 그것을하고 싶다면 일부 템플릿 내 옵션을 다룹니다.
다른 팁
또는 템플릿에서 "안전한"필터를 사용하십시오.
또한, 나는 Django의 문서에 익숙한 것이 얼마나 중요한지 강조 할 수 없습니다. 이와 같은 많은 일반적인 질문은 찾기 쉬운 답변과 설명이 있습니다 (이 같은)), 문서를 통해 읽고 모든 것이 어떻게 작동하는지에 대한 느낌을 얻는 것은 "왜 그렇게했는지"물어 보는 데 필요한 시간을 크게 줄이고 원하는 방식으로 작동하는 물건을 만드는 데 소비하는 시간을 늘릴 수 있습니다. .