템플릿 변수를 HTML로 렌더링


186

'messages'인터페이스를 사용하여 다음과 같이 사용자에게 메시지를 전달합니다.

request.user.message_set.create(message=message)

{{ message }}변수에 html을 포함 시키고 템플릿에서 마크 업을 피하지 않고 렌더링하고 싶습니다 .

답변:


333

HTML을 이스케이프하지 않으려면 safe필터와 autoescape태그를 확인하십시오.

safe:

{{ myhtml |safe }}

autoescape:

{% autoescape off %}
    {{ myhtml }}
{% endautoescape %}

예를 들어 유로 ( €) 와 같은 통화 기호를 표시해야하는 경우 보기에서 달러가 전달됩니다.
andilabs

이 유의 autoescape off하지 on. 나는 그 실수를하고 나중에 만 발견했다.
Anupam

37

텍스트로 더 복잡한 것을 원한다면 html을 반환하기 전에 자신의 필터를 만들고 마술을 할 수 있습니다. templatag 파일은 다음과 같습니다.

from django import template
from django.utils.safestring import mark_safe

register = template.Library()

@register.filter
def do_something(title, content):

    something = '<h1>%s</h1><p>%s</p>' % (title, content)
    return mark_safe(something)

그런 다음 템플릿 파일에 추가 할 수 있습니다

<body>
...
    {{ title|do_something:content }}
...
</body>

그리고 이것은 당신에게 좋은 결과를 줄 것입니다.


30

코드에서 템플릿을 다음과 같이 렌더링 할 수 있습니다.

from django.template import Context, Template
t = Template('This is your <span>{{ message }}</span>.')

c = Context({'message': 'Your message'})
html = t.render(c)

자세한 내용은 Django 문서 를 참조하십시오 .


나는 막대기의 끝이 잘못되었다고 생각하지만 지금은 대답을 남긴다.
Marcus Whybrow

30

를 사용하여 autoescapeHTML 이스케이프 기능을 해제하십시오.

{% autoescape off %}{{ message }}{% endautoescape %}


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.