django-admin - 在 Django 管理界面中,如何添加帶有超鏈接的自定義列?

  显示原文与译文双语对照的内容
124 0

我有一個 Django 管理界面,在模型列表中,我想要一個使用一個欄位值的超鏈接的自定義。它的中一個模型的欄位是 URL,我希望該列可以以在可以單擊的超鏈接中使用 URL 。這裡鏈接需要附加它的他URL作為模型欄位中的相對路徑。

时间:原作者:0个回答

143 3

在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的文檔。

原作者:
143 4

使用 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>'

有關更多信息,請參見文檔

原作者:
...