如何在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>'
有关更多信息,请参阅文档 。