Django autoescape все еще отображает HTML-теги для пользовательского фильтра
Я создал пользовательский фильтр, который в основном выглядит так
from django import template
from datetime import datetime
from django.contrib.humanize.templatetags.humanize import intcomma
from django.utils.safestring import mark_safe
register = template.Library()
def into_bs_badge(value):
# <span class="badge badge-primary">Primary</span>
# <span class="badge badge-secondary">Secondary</span>
# <span class="badge badge-success">Success</span>
# <span class="badge badge-danger">Danger</span>
# <span class="badge badge-warning">Warning</span>
# <span class="badge badge-info">Info</span>
# <span class="badge badge-light">Light</span>
# <span class="badge badge-dark">Dark</span>
badge = '<span class="badge badge-primary">' + str(value)+ '</span>'
return badge
# return mark_safe(badge)
register.filter('into_bs_badge', into_bs_badge)
На моей странице есть
{% autoescape off %}
{{ value.credits_count | into_bs_badge}}
{% endautoescape %}
Но я все еще получаю что-то вроде, вместо рендеринга фактического значка
<span class="badge badge-primary">28</span>
Я также пробовал
return mark_safe(badge)
Но когда я использую mark_safe, у меня ничего не отображается на странице, мне интересно, что я могу упустить
Наконец-то разобрались
from django import template
from django.utils.safestring import mark_safe
from django.utils.html import conditional_escape
register = template.Library()
@register.filter(needs_autoescape=True)
def into_bs_badge(value, autoescape=True):
# <span class="badge badge-primary text-dark">Primary</span>
# <span class="badge badge-secondary">Secondary</span>
# <span class="badge badge-success">Success</span>
# <span class="badge badge-danger">Danger</span>
# <span class="badge badge-warning">Warning</span>
# <span class="badge badge-info">Info</span>
# <span class="badge badge-light">Light</span>
# <span class="badge badge-dark">Dark</span>
val = str(value)
result = '<span class="badge bg-primary">%s</span>' % (val)
return mark_safe(result)