Ответ 1
Если вы не хотите экранировать HTML, посмотрите на safe
фильтр и тег autoescape
:
safe
:
{{ myhtml |safe }}
{% autoescape off %}
{{ myhtml }}
{% endautoescape %}
Я использую интерфейс 'messages' для передачи сообщений пользователю следующим образом:
request.user.message_set.create(message=message)
Я хотел бы включить html в мою переменную {{ message }}
и визуализировать ее без экранирования разметки в шаблоне.
Если вы не хотите экранировать HTML, посмотрите на safe
фильтр и тег autoescape
:
safe
:
{{ myhtml |safe }}
{% autoescape off %}
{{ myhtml }}
{% endautoescape %}
Если вы хотите сделать что-то более сложное с вашим текстом, вы можете создать свой собственный фильтр и сделать некоторую магию, прежде чем возвращать 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>
И это даст вам хороший результат.
Используйте autoescape
, чтобы выключить HTML:
{% autoescape off %}{{ message }}{% endautoescape %}
Вы можете сделать шаблон в своем коде так:
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.
Самый простой способ - использовать фильтр safe
:
{{ message|safe }}
Подробнее о документации Django для безопасного фильтра.
Не нужно использовать фильтр или тег в шаблоне. Просто используйте format_html(), чтобы перевести переменную в html, и Django автоматически отключит выключение для вашей переменной.
format_html("<h1>Hello</h1>")
Посмотрите здесь https://docs.djangoproject.com/en/1.9/ref/utils/