在django admin的 change_view, add_view和delete_view页面,如果想让页面完成操作后跳转到我们想去的url,该怎么做
默认django admin会跳转到changelist_view页面
------------------------------
下面的代码是django1.6的
下面是一个可行的做法,写admin model的时候重写父类admin.ModelAdmin的change_view 方法
from django.contrib import admin
class MyAdmin(admin.ModelAdmin):
def change_view(self, request, object_id, form_url='', extra_context=None):
result_template = super(MyAdmin, self).change_view(request, object_id, form_url, extra_context)
result_template['location'] = '/dest/url'
return result_template
可以看到,就是调用ModelAdmin的change_view得到结果,然后给 result_template做了一个这个操作
result_template['location'] = '/dest/url'
然后返回
为什么这样可行? 我们看看发生了什么
我们重写change_view,当然参数必须和父类一样了
首先调用了父类ModelAdmin.change_view的这个函数,这个函数返回了什么呢
追溯一下源代码,它返回的是一个TemplateResponse对象, 是通过调用 ModelAdmin.render_change_form()
return TemplateResponse(request, form_template or [
"admin/%s/%s/change_form.html" % (app_label, opts.model_name),
"admin/%s/change_form.html" % app_label,
"admin/change_form.html"
], context, current_app=self.admin_site.name)
那么接下来我们看看TemplateResponse
其实有这样的派生关系: TemplateResponse <---- SimpleTemplage <-----HttpRespone <--- HttpResponseBase
HttpResponse里实现了
def __setitem__(self, header, value):
header = self._convert_to_charset(header, 'ascii')
value = self._convert_to_charset(value, 'latin-1', mime_encode=True)
self._headers[header.lower()] = (header, value)
而如果一个类实现了 __setitem__, 那么[] 操作符就会去调用这个函数(相当于C++中的重载)
result_template['location'] = '/dest/url'
所以上面这行代码就在服务器返回的Response的header中写入了location, 而浏览器收到的Http Response的header中如果有location,就会跳转到location指定的 url
-------------------------------------------------------
但是我还发现了一个现象, 当进入到一个model item的change_view界面时,也就是GET请求这个url,虽然服务端返回了location,但是浏览器没有跳转,可能是因为当前有form需要提交.
而在change_view界面修改完后, 点击提交表单,浏览器收到服务端的location后,就发生了跳转.
定制django admin页面的跳转的更多相关文章
-
django admin页面样式丢失问题
wamp 配置django admin页面样式丢失问题 第一种方法:在apache配置文件httpd.conf中加入如下代码:Alias /static "E:\Python27\Lib\s ...
-
Django admin页面 显示中文问题
http://127.0.0.1:8000/admin/ 该页中实现中文显示. 1. 页面显示的数据表表名 实现中文显示. models.Model类的内部类Meta,有两个特殊的选项:verbos ...
-
Django admin 页面中文名称加s,去除s的设置
class UserInfo(models.Model): #字段 #字段 #字段 class Meta: verbose_name_plural = '用户列表'
-
利用 Django admin 完成更多任务(转)
利用 Django admin 完成更多任务 Django admin Django 为未来的开发人员提供了许多功能:一个成熟的标准库,一个活跃的用户社区,以及 Python 语言的所有好处.虽然 ...
-
Django admin究竟要怎么写才优雅
比如在Django admin 注册models时,会用到. 对于APP里自带的models,可以使用这种方式注册. from django.contrib import admin # Regist ...
-
Django admin注册model究竟要怎么写才优雅 批量注册model
比如在Django admin 注册models时,会用到. 对于APP里自带的models,可以使用这种方式注册. from django.contrib import admin # Regist ...
-
Django admin注册model究竟要怎么写才优雅
比如在Django admin 注册models时,会用到. 对于APP里自带的models,可以使用这种方式注册. from django.contrib import admin # Regist ...
-
Django Admin定制
Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件,使用方式有: 依赖APP: django.contrib.auth django.contrib.contenttyp ...
-
Django Admin 配置和定制基本功能(基本二次开发配置)
一 列表显示页面 1. list_display,列表时,定制显示的列 @admin.register(models.UserInfo) class UserAdmin(admin.ModelAdm ...
随机推荐
-
vcredist_x64.exe vcredist_x86.exe 静默安装方法收集
vcredist_x64.exe /install /quiet /norestart 更多方法参考如下: http://www.cnblogs.com/lidabo/archive/2013/01/ ...
-
【py分析】使用SGMLParser分析淘宝html
SGMLParser Python 默认自带 HTMLParser 以及 SGMLParser 等等解析器,前者实在是太难用了,我就用 SGMLParser 写了一个示例程序: import urll ...
-
Spring读取加密属性文件处理
引言:Spring框架俨然已经是目前Java WEB项目开发的一个宠儿,更有人将Spring, Struts,和Hibernage称之为Java WEB项目开发的3件利器.Spring的依赖.注入.A ...
-
LittleTools之批量替换工具
身为程序员,有很多事情都可以交给机器来做,这样可以提高工作效率. 在此先写个批量替换工具,用来将某些对象统一替换为另一对象. 比方说场景中摆了一堆树,位置.比例.旋转都已经调好了,但是对树的样式不太满 ...
-
小笔记(二):php数组
一.对于一二维数组重新组合为另一个二维数组,根据键值名称对一个二维数组进行重新组合例: /*$paramArray=array( * 'a'=>array('0'=>'1','1'=> ...
-
java--String常量池问题的几个例子
关于string内存分配不错的博客:http://blog.csdn.net/rj042/article/details/6871030 String常量池问题的几个例子 示例1: Java代码 St ...
-
Color the ball(树状数组+线段树+二分)
Color the ball Time Limit : 9000/3000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Tota ...
-
root用户无法访问Mysql数据库问题的解决
在使用Centos系统远程访问Mysql数据库的时候,系统提示报如下错误: Access Denied for User 'root'@'localhost' (using password: YES ...
-
linux----------今天又遇到一个奇葩的问题,就是linux文件的权限已经是777了但是还是没有写入权限,按照下面的命令就解决了
查看SELinux状态: 1./usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 SELinux status: ...
-
邮槽 匿名管道 命名管道 剪贴板 进程通讯 转自http://www.cnblogs.com/kzloser/archive/2012/11/04/2753367.html#
邮槽 通信流程: 服务器 客户端 注意: 邮槽是基于广播通信体系设计出来的,它采用无连接的不可靠的数据传输 邮槽可以实现一对多的单向通信,我们可以利用这个特点编写一个网络会议通知系统,而且实现这一的系 ...