如何在djangopipe理界面中添加一个带有超链接的自定义列?

我有一个Django的pipe理界面,在模型列表中,我想要一个自定义列,将使用其中一个字段值的超链接。 基本上模型的领域之一是一个url,我希望列可以在一个可点击的超链接的URL。 此链接需要在模型字段中添加附加的URL作为其相对path。

在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文档。

使用format_html实用程序。 这将从参数中转义任何html,并将该string标记为可安全地在模板中使用。 在Django 1.9中, allow_tags方法属性已被弃用。

 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) 

现在您的pipe理员用户即使在以下情况下也是安全的:

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

有关更多信息,请参阅文档 。