【发布时间】: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。如果您在此处显示的就是您在过滤器中需要的全部那么根本不需要为此目的使用过滤器。只需在您的模板中执行此操作<span class="badge badge-primary">{{ value.credits_count }}</span> -
@amadousow 是的,引导程序已经加载,我绝望地添加了 mark_safe,因为没有任何工作,我使用过滤器而不是直接使用模板的主要原因是会有更多复杂的逻辑在徽章内显示正确的 css 类,因为在模板页面中执行此操作会很复杂