django admin:如何在change_form.html中使只读url字段可点击

django

1个回答

写回答

15755332870

2025-06-13 14:10

+ 关注

Django
Django

在使用Django的admin后台时,我们经常需要在Model的change_form.html中自定义展示的方式。有时候,我们可能需要将某个字段设置为只读,并且希望该字段的值仍然可以被点击,以便在点击后能够跳转到指定的链接。本文将介绍如何实现这一需求,并提供一个案例代码作为参考。

首先,我们需要在Model的admin.py文件中定义一个自定义的ModelAdmin类。在该类中,我们可以重写change_view方法,以便在渲染change_form.html时对字段进行自定义处理。

Python

from Django.contrib import admin

class CustomModelAdmin(admin.ModelAdmin):

readonly_fields = ['url_field']

def change_view(self, request, object_id, form_url='', extra_context=None):

extra_context = extra_context or {}

extra_context['make_url_clickable'] = True # 将该字段的值设置为True,表示可点击

return super().change_view(request, object_id, form_url, extra_context=extra_context)

接下来,我们将在change_form.html中进行相应的修改。我们需要判断字段的值是否可点击,如果可点击,则将其转换为链接。我们可以使用Django模板语言来实现这一功能。

html

{% extends "admin/change_form.html" %}

{% load i18n %}

{% block extrahead %}

{{ block.super }}

<script>

window.addEventListener('DOMContentLoaded', function() {

var urlField = document.getElementById("id_url_field");

{% if make_url_clickable %}

urlField.innerHTML = '' + urlField.innerHTML + '';

{% endif %}

urlField.style.pointerEvents = 'auto';

});

</script>

{% endblock %}

在上面的代码中,我们首先通过DOM操作获取到url_field字段的元素,然后根据make_url_clickable字段的值来判断是否将其转换为链接。如果可点击,则将其值包裹在<a>标签中,并设置href属性为原始值。最后,我们将pointerEvents属性设置为auto,以便将鼠标指针样式设置为可点击的样式。

以上就是实现只读url字段可点击的方法。通过以上的自定义ModelAdmin类和修改的change_form.html,我们可以实现将指定字段设置为只读,并且该字段的值仍然可以被点击。这在一些需要展示外部链接的场景中非常有用。

案例代码:

假设我们有一个名为Website的Model,其中有一个字段为url,我们希望在admin后台中展示该字段,并使其只读可点击。

首先,在models.py文件中定义Website模型:

Python

from Django.db import models

class Website(models.Model):

url = models.URLField()

然后,在admin.py文件中定义Website模型的admin类,并使用我们之前定义的CustomModelAdmin:

Python

from Django.contrib import admin

from .models import Website

class WebsiteAdmin(CustomModelAdmin):

readonly_fields = ['url']

admin.site.register(Website, WebsiteAdmin)

最后,我们需要创建一个change_form.html文件,并将其放置在app的templates/admin/目录下。在该文件中,我们将实现之前提到的修改:

html

{% extends "admin/change_form.html" %}

{% load i18n %}

{% block extrahead %}

{{ block.super }}

<script>

window.addEventListener('DOMContentLoaded', function() {

var urlField = document.getElementById("id_url");

{% if make_url_clickable %}

urlField.innerHTML = '' + urlField.innerHTML + '';

{% endif %}

urlField.style.pointerEvents = 'auto';

});

</script>

{% endblock %}

通过以上步骤,我们就成功实现了在Django admin的change_form.html中使只读的url字段可点击。这样,我们就可以在点击该字段的值时跳转到指定的链接。这在一些需要展示外部链接的场景中非常实用。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号