2010-01-28 94 views
47

我有一個django管理界面,並在模型列表中我想要一個自定義列,將使用其中一個字段值的超鏈接。基本上模型的一個領域是一個網址,我希望列可以在一個可點擊的超鏈接中的URL。此鏈接需要在模型字段中添加附加的URL作爲其相對路徑。如何在django管理界面中添加超鏈接自定義列?

+1

的可能的複製[如何可點擊的鏈接添加到Django管理現場?](http://stackoverflow.com/questions/1949248/how-to-add-clickable-links-to-a-field-in -django-admin) – Louis 2016-05-23 22:57:44

回答

60

定義您的ModelAdmin類的方法及其allow_tags屬性設置爲True。這將允許該方法返回未轉義的HTML以在列中顯示。

然後列出其作爲ModelAdmin.list_display屬性的條目。

實施例:

class YourModelAdmin(admin.ModelAdmin): 
    list_display = ('my_url_field',) 

    def my_url_field(self, obj): 
     return '<a href="%s%s">%s</a>' % ('http://url-to-prepend.com/', obj.url_field, obj.url_field) 
    my_url_field.allow_tags = True 
    my_url_field.short_description = 'Column description' 

參見ModelAdmin.list_display的文檔的更多細節。

+0

有一天我發現你實際上不需要'a'標籤,因爲Django管理員會自動將URL變成超鏈接。儘管我不在工作電腦上,但我可能會錯的。在我的情況下,我不需要設置'allow_tags'。我也在我的模型上創建了一個'get_url()'函數,而不是我的管理模型 - 但這很簡單。然而,如果我們想用'target = _blank'在一個新窗口中打開鏈接,你的方式是最好的 - 希望這會有所幫助。 – 2010-01-29 21:56:11

10

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

from django.utils.html import format_html 

class MyModelAdmin(admin.ModelAdmin): 
    list_display = ['show_url', ...] 
    ... 

    def show_url(self, obj): 
     return format_html("<a href='http://pre.com{0}'>{0}</a>", obj.url) 

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

url == '<script>eval(...);</script>' 

更多信息,請參見the documentation

相關問題