
Django
在使用Django的admin后台时,我们经常需要在Model的change_form.html中自定义展示的方式。有时候,我们可能需要将某个字段设置为只读,并且希望该字段的值仍然可以被点击,以便在点击后能够跳转到指定的链接。本文将介绍如何实现这一需求,并提供一个案例代码作为参考。
首先,我们需要在Model的admin.py文件中定义一个自定义的ModelAdmin类。在该类中,我们可以重写change_view方法,以便在渲染change_form.html时对字段进行自定义处理。Pythonfrom Django.contrib import adminclass 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模型:Pythonfrom Django.db import modelsclass Website(models.Model): url = models.URLField()然后,在admin.py文件中定义Website模型的admin类,并使用我们之前定义的CustomModelAdmin:
Pythonfrom Django.contrib import adminfrom .models import Websiteclass 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字段可点击。这样,我们就可以在点击该字段的值时跳转到指定的链接。这在一些需要展示外部链接的场景中非常实用。Copyright © 2025 IZhiDa.com All Rights Reserved.
知答 版权所有 粤ICP备2023042255号