【问题标题】:Django autoescape still displays HTML Tags for a custom filterDjango autoescape 仍然显示自定义过滤器的 HTML 标签
【发布时间】:2021-12-31 19:41:50
【问题描述】:

我创建了一个自定义过滤器,基本上看起来像这样

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 时,页面中什么也没有显示,我想知道我可能会丢失什么

【问题讨论】:

  • 你的页面头部有引导程序吗?以及为什么要在此使用mark_safe,因为value.credits_count 是数据库中的一个值(数字),那么我看不出有任何理由为什么要在其上使用该mark_safe。如果您在此处显示的就是您在过滤器中需要的全部那么根本不需要为此目的使用过滤器。只需在您的模板中执行此操作&lt;span class="badge badge-primary"&gt;{{ value.credits_count }}&lt;/span&gt;
  • @amadousow 是的,引导程序已经加载,我绝望地添加了 mark_safe,因为没有任何工作,我使用过滤器而不是直接使用模板的主要原因是会有更多复杂的逻辑在徽章内显示正确的 css 类,因为在模板页面中执行此操作会很复杂

标签: django django-templates


【解决方案1】:

终于明白了

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) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 2016-07-01
    • 2020-11-07
    相关资源
    最近更新 更多