2009-12-22 76 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

相关问题