Django Admin添加可点击Material Icons外部链接的问题
解决Django Admin中给Icon字段添加可点击链接的问题
方案1:在列表页添加独立链接列(修正原有代码)
你之前的代码因HTML标签被转义,无法渲染成可点击链接。修改link_to_google方法,直接使用未转义的HTML标签,并添加target="_blank"让链接在新窗口打开:
from .models import RaffleGame from django.utils.html import format_html from django.contrib import admin class RaffleGameAdmin(admin.ModelAdmin): list_display = ('icon', 'link_to_google') def link_to_google(self, obj): url = 'https://fonts.google.com/icons?icon.set=Material+Icons' link_text = '点击查看更多图标' return format_html('<a href="{}" target="_blank">{}</a>', url, link_text) link_to_google.short_description = '更多图标在这里' admin.site.register(RaffleGame, RaffleGameAdmin)
修改后,列表页会新增一列显示可点击链接,点击后在新窗口打开目标网站。
方案2:在编辑页面给Icon字段添加带链接的帮助文本
若希望在编辑表单的icon字段旁直接显示带链接的帮助文字,可通过自定义ModelAdmin的formfield_for_dbfield方法实现:
from .models import RaffleGame from django.utils.html import format_html from django.contrib import admin class RaffleGameAdmin(admin.ModelAdmin): fields = ('title', 'icon', 'icon_color', 'icon_outlined', 'announcement_date', 'draw_date', 'finished_date', 'status') def formfield_for_dbfield(self, db_field, **kwargs): field = super().formfield_for_dbfield(db_field, **kwargs) if db_field.name == 'icon': field.help_text = format_html( '请输入Material Icons的名称,<a href="{}" target="_blank">点击这里查看所有可用图标</a>', 'https://fonts.google.com/icons?icon.set=Material+Icons' ) return field admin.site.register(RaffleGame, RaffleGameAdmin)
修改后,编辑页面的icon字段下方会显示带可点击链接的帮助文本,点击后在新窗口打开图标网站。
原有代码失效原因
你之前在format_html中使用了转义后的HTML实体(<、"),但format_html本身会自动处理安全的HTML标签,手动转义导致最终页面仅显示纯文本,而非可点击链接。
内容的提问来源于stack exchange,提问作者Gurami Tchumburidze
相关产品推荐
相关产品推荐

