Как я могу использовать строку в django как html? что включает в себя djangos inline html
Например:
str = "<b>Hello<b> this string also includes my {{myvariable}} {%if myvariable%} and its true {%endif%}"
Я знаю, что существует фильтр |safe, но он не работает для инлайн html, только для html. То же самое касается фильтров autoescape off.
Я буду рад, если кто-нибудь сможет мне помочь :D
Используйте его следующим образом
from django.utils.safestring import mark_safe
str = "<b>Hello<b> this string also includes my {{myvariable}} {%if myvariable%} and its true {%endif%}"
str = mark_safe(str)
Вы должны решить, будете ли вы делать это форматирование в Python и передавать его в шаблон, или в шаблоне. Кроме того, нужно ли экранировать специальные символы в переменной myvariable или нет.
В шаблоне:
<b>Hello<b> this string also includes my {{myvariable}} {%if myvariable%} and its true {%endif%}"
или чтобы избежать эскейпа
<b>Hello<b> this string also includes my {{myvariable|safe}} {%if myvariable%} and its true {%endif%}"
В Python с экранированием
annitt = "and its true " if myvariable else ""
safestr = format_html(
"<b>Hello<b> this string also includes my {} {}", myvariable, anitt)
Без эскейпа
annitt = "and its true " if myvariable else ""
unsafestr = f"<b>Hello<b> this string also includes my {myvariable} {anitt}"
safestr = mark_safe( unsafestr)
Передайте его в шаблон, а в нем {{safestr}}
Для всех, кому нужно это увидеть, вот учебник:
сначала вам нужна ваша строка:
str = '{{ value.passed }}{% if not value.passed %}. Thats not good, Look here for help <a href="https://{{url}}" target="_blank">Google</a>.{% endif %}'
затем используйте функцию рендеринга и контекст для выполнения Шаблон:
from django.template import Context, Template
t = Template(str)
dict = {'value':{'passed': False} ,'url': "www.google.com"}
newstr = (t.render(Context(dict)))
в последнюю очередь используйте способ выполнения html-кода
Теперь я использую этот метод (благодаря @Dad)
from django.utils.safestring import mark_safe
str = mark_safe(newstr)