Как я могу использовать строку в 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)
Вернуться на верх