문제

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의 문서에 익숙한 것이 얼마나 중요한지 강조 할 수 없습니다. 이와 같은 많은 일반적인 질문은 찾기 쉬운 답변과 설명이 있습니다 (이 같은)), 문서를 통해 읽고 모든 것이 어떻게 작동하는지에 대한 느낌을 얻는 것은 "왜 그렇게했는지"물어 보는 데 필요한 시간을 크게 줄이고 원하는 방식으로 작동하는 물건을 만드는 데 소비하는 시간을 늘릴 수 있습니다. .

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top