2008-10-26 4 views
14

내 장고 응용 프로그램에서 전자 메일 본문을 만드는 데 템플릿을 사용하고 있습니다. 매개 변수 중 하나는 URL이며 앰퍼샌드로 구분 된 두 개의 매개 변수가 있습니다.django에서 컨텍스트를 사용할 때 HTML 인코딩을 비활성화하는 방법

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 같이 인코딩 "& A;". 문제를 해결하는 한 가지 방법은 각 매개 변수를 내 템플리트에 개별적으로 전달하고 템플리트에서 URL을 구성하는 것입니다. 그러나이를 피하기를 원합니다.

컨텍스트 매개 변수의 HTML 인코딩을 비활성화하거나 최소한 앰퍼샌드 인코딩을 피할 수있는 방법이 있습니까?

답변

19

은 하나의 변수를 해제하려면 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 설정하는, use the autoescape argument when initialising a Context : 문서의

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

How to turn [Automatic HTML escaping] off 섹션 당신이 오히려 거기에서 그것을하고 싶다면 in-template 옵션의 일부를 다룬다.

+0

mark_safe가 원했던대로, 나는 1 매개 변수에만 필요했습니다. –

7

또는 템플릿에 "안전"필터 만 사용하십시오.

또한 나는 장고의 문서를 얼마나 잘 알고 있는지 충분히 강조 할 수 없다. 이와 같은 많은 공통적 인 질문에는 쉽게 찾을 수있는 대답과 설명 (like this one)이 있으며 문서를 읽고 모든 것이 작동하는 방식에 대한 느낌을 얻으면 지출해야하는 시간이 크게 줄어들 것입니다. "왜 그렇게 했습니까?" 원하는 방식으로 작동하는 물건을 만드는 데 드는 시간을 늘리십시오.

관련 문제