如何在django管理界面中添加超链接自定义列?
我有一个django管理界面,并在模型列表中我想要一个自定义列,将使用其中一个字段值的超链接。基本上模型的一个领域是一个网址,我希望列可以在一个可点击的超链接中的URL。此链接需要在模型字段中添加附加的URL作为其相对路径。如何在django管理界面中添加超链接自定义列?
定义您的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的文档的更多细节。
有一天我发现你实际上不需要'a'标签,因为Django管理员会自动将URL变成超链接。尽管我不在工作电脑上,但我可能会错的。在我的情况下,我不需要设置'allow_tags'。我也在我的模型上创建了一个'get_url()'函数,而不是我的管理模型 - 但这很简单。然而,如果我们想用'target = _blank'在一个新窗口中打开链接,你的方式是最好的 - 希望这会有所帮助。 – 2010-01-29 21:56:11
使用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。
的可能的复制[如何可点击的链接添加到Django管理现场?](http://*.com/questions/1949248/how-to-add-clickable-links-to-a-field-in -django-admin) – Louis 2016-05-23 22:57:44