将静态资源添加到模板过滤功能

add static ressource to template filter function

我想在使用模板标签时从我的静态目录动态添加图标,但我不想将它们添加到模板中 HTML,而是使用过滤器:

{% for field in form %}
        <td>{{ field|format_ }}</td>
{% endfor %}

format_看起来像这样:

@register.filter(name = "format_")
def format_(field):
    if field.widget_type == "clearablefile":
        f = f"""{field}<button class="btn btn-danger"><img src="{{% static 'images/x-square.svg' %}}"></button>"""
        return mark_safe(f)
    return field

我尝试使用与在模板中使用的语法相同的语法,但只是转义了:<img src="{{% static 'images/x-square.svg' %}}"> 只是以明文形式准确显示,而不是模板上的图标。这里的正确方法是什么?

像这样使用static函数:

# Older Django <3.0 (also deprecated in 2.0):
from django.contrib.staticfiles.templatetags.staticfiles import static

# Django 3.0+
from django.templatetags.static import static

iconUrl = static('images/x-square.svg')

您的代码将是:

@register.filter(name = "format_")
def format_(field):
    if field.widget_type == "clearablefile":
        iconUrl = static('images/x-square.svg')
        f = f"""{field}<button class="btn btn-danger"><img src="{iconUrl}"></button>"""
        return mark_safe(f)
    return field