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

有关更多信息,请参见文档

原作者:
...