如何让Django在ModelAdmin中不转义HTML

1 投票
2 回答
1423 浏览
提问于 2025-04-17 05:34

我有一个类是用来配置 django.contrib.admin 以便管理我的 Stream 模型。

class StreamAdmin(admin.ModelAdmin):
    def stream_title(instance):
        return instance.info.title

    def network_name(instance):
        return '<img src="%s" />' % instance.network.image_url

    fieldsets = (
        (None, {
            'fields' : ('name', 'network', 'score', 'custom_url')
        }),

    )

    list_display = ('name', stream_title, network_name, 'online', 'score')

    ordering = ('name', 'score')

这个 network_name 函数返回的是 HTML 代码,但它被转义了。我该怎么做才能不让它被转义呢?

2 个回答

2

你可以使用 mark_safe 这个功能:

from django.utils.safestring import mark_safe

class StreamAdmin(admin.ModelAdmin):
    ...

    def network_name(instance):
        return mark_safe('<img src="%s" />' % instance.network.image_url)

    ...

试着在模板中使用 safe 过滤器,或者使用 autoescape

使用 autoescape 标签,你可以像这样设置一个代码块:

{% autoescape on %}
    {{ model.network_name }}
{% endautoescape %}

<!-- or either -->
{{ model.network_name|safe }}
5

使用 allow_tags

def network_name(instance):
    return '<img src="%s" />' % instance.network.image_url
network_name.allow_tags = True

撰写回答