2011-11-03 39 views
1

我有這個類來爲我的Stream模型配置django.contrib.admin如何讓Django避免在ModelAdmin中轉義HTML

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,但它被轉義。我怎麼能阻止呢?

回答

5

使用allow_tags

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

這樣做,謝謝 – Hubro

+0

由於django 1.9 allow_tags已被棄用,因此使用'mark_safe()','format_html()'或'format_html_join() – rain01

1

您可以使用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 }} 
+0

改變了我行'回報mark_safe(「」%instance.network.image_url)',但它仍然逃脫我加我的答案的HTML – Hubro

+0

,但奇怪的是,mark_safe沒有工作。 –

+1

'mark_safe'適合您自己的觀點,但在django管理員中,'allow_tags'是正確的方法。 – Alasdair