如何将Django Admin detail view重定向逻辑移至admin.py文件?
解决Django CMS Admin详情页自动跳转至列表页的问题
完全理解你的困扰——在模板里硬写重定向逻辑虽然能跑,但确实不够优雅,把这个逻辑移到admin.py里才是更符合Django Admin规范的做法,而且代码会整洁很多。
你只需要在对应的Admin类里覆盖change_view方法就可以了,这个方法正是Django用来处理模型详情(修改)页面的核心方法。直接在方法里返回重定向到列表页的响应就行,不需要再依赖模板:
from django.contrib import admin from django.shortcuts import redirect from cms.models import YourTargetModel # 替换成你要处理的Django CMS模型 class YourTargetModelAdmin(admin.ModelAdmin): def change_view(self, request, object_id, form_url='', extra_context=None): # 方式1:用Admin类自带的changelist_url属性,更简洁省心 return redirect(self.changelist_url) # 方式2:如果需要更灵活的URL控制,用reverse手动生成 # return redirect(reverse('admin:cms_yourtargetmodel_changelist')) # 如果是Django CMS自带的模型(比如Page、Placeholder),记得先解除默认注册再重新注册 admin.site.unregister(YourTargetModel) admin.site.register(YourTargetModel, YourTargetModelAdmin)
简单解释下原理:
change_view是ModelAdmin中负责渲染单个对象详情页的方法,我们直接覆盖它,跳过默认的模板渲染流程,直接返回重定向响应。self.changelist_url是Admin类内置的属性,自动指向当前模型的列表页URL,用这个比手动写reverse更省心,也不容易因为URL命名变化出错。- 如果是Django CMS自带的系统模型,必须先调用
admin.site.unregister解除默认的Admin绑定,再用自定义的Admin类重新注册才能生效。
这样修改后,用户只要访问该模型的详情页,就会被直接跳转到列表页,所有逻辑都集中在admin.py里,完全不需要碰模板代码,是不是清爽多了?
内容的提问来源于stack exchange,提问作者user8479942
相关产品推荐
相关产品推荐

