2009-12-22 106 views
40

我有這個admin.py如何添加可點擊鏈接到Django admin中的字段?

class LawyerAdmin(admin.ModelAdmin): 
    fieldsets = [ 
     ('Name', {'fields': ['last', 'first', 'firm_name', 'firm_url', 'school', 'year_graduated']}), 
    ] 
    list_display = ('last', 'first', 'school', 'year_graduated', 'firm_name', 'firm_url') 
    list_filter = ['school', 'year_graduated'] 
    search_fields = ['last', 'school', 'firm_name'] 

,我想使「firm_url」領域可點擊每個字段中列出的URL。我怎樣才能做到這一點?謝謝。

+4

恕我直言[這](http://stackoverflow.com/a/33616452/1472718)應該是正確的答案。 – 2015-11-24 03:40:28

回答

55

定義您LawyerAdmin類的定製方法,它返回的鏈接爲HTML:

def show_firm_url(self, obj): 
    return '<a href="%s">%s</a>' % (obj.firm_url, obj.firm_url) 
show_firm_url.allow_tags = True 

the documentation

+0

謝謝!這很好。 – Zeynel 2009-12-22 23:09:13

+7

如果'firm_url ='http://a.aa/ ''? – 2015-07-24 14:57:04

+4

改爲使用[Seppo's answer](http://stackoverflow.com/a/31745953/855050)。它更安全。 – becko 2015-08-31 18:55:57

5

添加show_firm_urllist_display

+0

是的,我做了,現在它的工作,謝謝。但它會覆蓋在我的模型中指定的文本顯示,並在列的頭部顯示「顯示公司URL」。我不知道是否有解決方法,但我將「show_firm_url」更改爲「Bio_link」,現在一切正常。 – Zeynel 2009-12-22 23:19:38

2

但是它覆蓋在列的頭枕在我的模型,並顯示「顯示公司網址」中指定的文本顯示

可以通過分配SHORT_DESCRIPTION更改物業:

show_firm_url.short_description = "Firm URL" 
47

使用format_html實用程序。這將從參數中轉義任何html,並將該字符串標記爲可安全地在模板中使用。方法屬性allow_tags在Django 1.9中已被棄用。

from django.utils.html import format_html 

class LawyerAdmin(admin.ModelAdmin): 
    list_display = ['show_firm_url', ...] 
    ... 

    def show_firm_url(self, obj): 
     return format_html("<a href='{url}'>{url}</a>", url=obj.firm_url) 

    show_firm_url.short_description = "Firm URL" 

現在您的管理員用戶甚至在的情況下是安全的:

firm_url == 'http://a.aa/<script>eval(...);</script>' 

更多信息,請參見the documentation

相關問題