在django管理员更改列表中显示HTML字段

在django管理员更改列表中显示HTML字段,django,django-admin,Django,Django Admin,有没有一种方法可以在模型管理员的变更列表模板的字段中使用HTML 例如:我希望使“站点域”列可单击,并能够导航到该站点: 应该是可行的 编辑:有关如何在ModelAdmin中定义选项的信息,请参见,然后在admin.py中注册时适当地执行此操作,确保模板存在,例如: from django.contrib import admin from .models import MyModel @admin.register(MyModel) class MyModelAdmin(admin.Mode

有没有一种方法可以在模型管理员的变更列表模板的字段中使用HTML

例如:我希望使“站点域”列可单击,并能够导航到该站点:

应该是可行的

编辑:有关如何在ModelAdmin中定义选项的信息,请参见,然后在admin.py中注册时适当地执行此操作,确保模板存在,例如:

from django.contrib import admin
from .models import MyModel

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    change_list_template = 'myapp/mymodel_change_list.html'

您可以创建一个函数
clickable\u site\u domain()
,该函数根据
site\u domain
的值返回一个HTML链接。然后需要将此方法名称添加到
ModelAdmin.list\u display
属性中。最后,您需要将字符串标记为安全的,以避免使用
mark_safe
进行HTML转义

在Django 1.9之前,您需要为此函数设置
allow_tags=True
,以避免HTML转义

来自django.utils.text的
导入标记为安全的#旧版本
从django.utils.html导入mark#u safe#更新版本
类MyModelAdmin(admin.ModelAdmin):
list_display=(..,'clickable_site_domain',..)#将自定义方法添加到要显示的字段列表中。
def可点击站点域(自身、obj):
#返回不会转义的HTML链接
安全返回标记(
''(对象站点\域,对象站点\域)
)

django 2.2中截至2019年的最新答案

from django.contrib import admin
from django.utils.html import format_html

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    list_display = [..., 'custom_field', ...]

    def custom_field(self, obj):
        return format_html('<a href={}>URL</a>', obj.url)
来自django.contrib导入管理
从django.utils.html导入格式\u html
@管理员注册(MyModel)
类MyModelAdmin(admin.ModelAdmin):
列表显示=[…,'自定义字段',…]
def自定义_字段(自身、obj):
返回格式为html(“”,obj.url)

如何解释?补充,但@Rahul Gupta的答案显然更好,我错过了这个选项。与什么无关wants@rowman不正确,尽管这绝对不是一个好的方法,而且它现在是指Django文档的EOL版本。如果希望或需要自定义“更改列表”视图中的内容,可以替代此模板或特定块。重申一下,这并不是一个实现op想要的东西的好方法,但如果说模板与变更列表视图中呈现的内容“无关”,则会遗漏管理类和模板如何结合的关键部分,即使我同意这样做是错误的,而且这个答案缺乏足够的细节。@Jmills,是的,考虑到您的解释,我承认响应并非无关紧要。啊,所以关键是allow_tags
allow_tags
不会从输出中转义HTML。
allow_tags
已被弃用。现在正确的方法是通过
mark_safe
将字符串标记为安全。不确定是否/何时更改,但在Django 2.2中,必须从
Django.utils.html
导入
mark_safe,因此第一行应该是:
from Django.utils.html import mark_safe
from django.contrib import admin
from django.utils.html import format_html

@admin.register(MyModel)
class MyModelAdmin(admin.ModelAdmin):
    list_display = [..., 'custom_field', ...]

    def custom_field(self, obj):
        return format_html('<a href={}>URL</a>', obj.url)