Відображення змінної шаблону як HTML


186

Я використовую інтерфейс 'повідомлення' для передачі повідомлень таким користувачам:

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

Я хотів би включити html у свою {{ message }}змінну та відтворити її, не уникаючи розмітки в шаблоні.

Відповіді:


333

Якщо ви не хочете, щоб уникнути HTML, перегляньте safeфільтр і autoescapeтег:

safe:

{{ myhtml |safe }}

autoescape:

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

Якщо вам потрібно відобразити, наприклад, знаки валюти, такі як євро ( €), долар, який перейшов з перегляду, це шлях.
andilabs

Зауважте, що це так autoescape offі ні on. Я допустив цю помилку і виявив її лише пізніше.
Анупам

37

Якщо ви хочете зробити щось складніше зі своїм текстом, ви можете створити власний фільтр і зробити магію перед поверненням html. З файлом шаблону виглядає так:

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



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.