Отображение переменной шаблона как HTML

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

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

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

Ответ 1

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

safe:

{{ myhtml |safe }}

autoescape:

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

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

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

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

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

Подробнее см. Django docs.

Ответ 6

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

format_html("<h1>Hello</h1>")

Посмотрите здесь https://docs.djangoproject.com/en/1.9/ref/utils/