Визуализация переменной шаблона в виде HTML - PullRequest
163 голосов
/ 31 января 2011

Я использую интерфейс 'messages' для передачи сообщений пользователю следующим образом:

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

Я бы хотел включить html в мою переменную {{ message }} и отобразить ее без экранирования в шаблоне.

Ответы [ 6 ]

293 голосов
/ 31 января 2011

Если вы не хотите экранировать HTML, посмотрите на фильтр safe и тег autoescape:

safe

{{ myhtml |safe }}

autoescape:

{% autoescape off %}
    {{ myhtml }}
{% endautoescape %}
31 голосов
/ 25 февраля 2015

Если вы хотите сделать что-то более сложное с вашим текстом, вы можете создать свой собственный фильтр и сделать немного магии, прежде чем возвращать 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>

И это даст вам хороший результат.

29 голосов
/ 31 января 2011

Используйте autoescape, чтобы отключить экранирование HTML:

{% autoescape off %}{{ message }}{% endautoescape %}
26 голосов
/ 31 января 2011

Вы можете отобразить шаблон в вашем коде так:

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

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

См. Django документы для получения дополнительной информации.

16 голосов
/ 31 января 2011

Самый простой способ - использовать фильтр safe:

{{ message|safe }}

Ознакомьтесь с документацией Django для безопасного фильтра для получения дополнительной информации.

5 голосов
/ 08 февраля 2016

Нет необходимости использовать фильтр или тег в шаблоне.Просто используйте format_html (), чтобы перевести переменную в html, и Django автоматически отключит для вас переменную escape.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...