在数据维护类应用中,一般的做法是首先会显示一个列表页,用户可以选择列表页中的某一个数据进行操作。比如修改的处理,用户选中一个数据项后,应用会引导用户到数据修改页面,修改完毕后再返回列表页。

Django已经内置了很多有用的功能帮我们实现类似的功能。使用ListView显示数据列表,使用UpdateView实现数据修改功能....但是如果列表页是一个分页的数据,修改后应该返回到修改前的那一页才好。这时候使用Django内置的功能就不能满足要求了,所幸只需稍加调整即可:

首先,我们来在修改页面的模板中,增加一个隐含字段,记录上一个url:

<input type="hidden" name="__next__" value="{{ request.META.HTTP_REFERER }}">

其次,通过子类化UpdateView,并重写get_success_url来引用刚才加的保存上一页面的隐含字段:

class UpdateView(UpdateView):def get_success_url(self):self.url = self.request.POST['__next__']return self.url

最后,在url配置中使用自定义的UpdateView替换原来的内置通用视图即可。

上边的方法仍有一个漏洞, 每次刷新/提交页面的时候request.META.HTTP_REFERER都会改变,因此我们需要在页面第一次加载的时候保存起来,因此最终的方案变为:

class UpdateView(UpdateView):def get_context_data(self, **kwargs):context = super(UpdateView,self).get_context_data(**kwargs)if '__next__' in self.request.POST:context['i__next__'] = self.request.POST['__next__']else:context['i__next__'] = self.request.META['HTTP_REFERER']return contextdef get_success_url(self):self.url = self.request.POST['__next__']return self.url

模板中的保存的__next__的代码变为:

<input type="hidden" name="__next__" value="{{ i__next__ }}">

返回的链接直接可以修改为:

<a class="btn" href="{{ i__next__ }}">取消</a>

转载于:https://www.cnblogs.com/Ankh/archive/2012/10/06/2712751.html

Django中使用UpdateView修改数据后,返回列表页相关推荐

  1. yishaadmin,yishaadmin修改数据后回到起始页的解决办法,保持在修改前的页码,分页组件在修改数据后不返回到第一页

    用过一沙框架开发的知道,一沙封装了很多js通用的方法,组件,其中ysTable()便是其中之一. 分页组件是包含在ysTable()中的,其中的分页组件,只有选择器类名,没有唯一的ID定位, 通过看页 ...

  2. mybatis插入数据后返回自增主键ID详解

    1.场景介绍: ​ 开发过程中我们经常性的会用到许多的中间表,用于数据之间的对应和关联.这个时候我们关联最多的就是ID,我们在一张表中插入数据后级联增加到关联表中.我们熟知的mybatis在插入数据后 ...

  3. mysql c接口返回自增id_详解mysql插入数据后返回自增ID的七种方法

    引言 mysql 和 oracle 插入的时候有一个很大的区别是: oracle 支持序列做 id: mysql 本身有一个列可以做自增长字段. mysql 在插入一条数据后,如何能获得到这个自增 i ...

  4. mysql 新增返回主键自增id_详解mysql插入数据后返回自增ID的七种方法

    引言 mysql 和 oracle 插入的时候有一个很大的区别是: oracle 支持序列做 id: mysql 本身有一个列可以做自增长字段. mysql 在插入一条数据后,如何能获得到这个自增 i ...

  5. django ajax页面跳转,Django中的AJAX GET请求后重定向

    我是新的Django和AJAX(javascript). 最后,我可以发送一些参数到Django视图.这个视图呈现一个编辑表单. 我发送的参数和视图响应的形式与我需要的信息,但我不能重定向到从视图呈现 ...

  6. 七种MYSQL插入数据后返回自增主键ID的方法

    我们都知道,mysql中的insert插入之后会有返回值,返回的是影响的行数,也就是说,成功插入一条数据之后返回的是1,失败则返回0.那么,很多时候我们都想要得到最后插入的id值,下面七种方法均可,结 ...

  7. mysql插入数据后返回自增id

    mysql插入数据后返回自增id 使用<insert 中的useGeneratedKeys 和 keyProperty 两个属性 在Mybatis Mapper文件中添加属性 useGenera ...

  8. vue项目实现从商品列表页跳转详情页后,返回列表页保持页面在原位置,且列表页刷新的方法

    vue项目实现从商品列表页跳转详情页后,返回列表页保持页面在原位置,且列表页刷新的方法 页面跳转后回退保持原位置 App.vue页面中使用keep-alive缓存组件 <template> ...

  9. vue实现详情页返回列表页,数据不加载且页面原有位置不变

    常见的需求: 列表页 ====>点击跳转到列表详情页面 ======> 返回列表页(希望页面不重新加载,且保留原来浏览的位置). 1.实现页面的不重新加载 使用vue的keep-alive ...

最新文章

  1. 逆转衰老!“70岁”小鼠经过数月治疗,肾脏皮肤血液细胞重返“年轻态”
  2. Linux套接字聊天
  3. Stanford UFLDL教程 独立成分分析
  4. python3 获取cookie解决方案
  5. 频繁默认网关不可用_win10 总是默认网关不可用,怎么回事?
  6. 读取遥感图像中遇到的问题集锦
  7. linux cpu 工作频率,Linux系统限制CPU工作频率(示例代码)
  8. axure数据报表元件库_axure图表元件库 axure自制的组件库(包括数据组件)
  9. 抓包工具Fiddler的安装与使用
  10. STM8L152的LCD模块原理及驱动
  11. 【js+html禁用截屏,打印,另存为】
  12. Linux下3种常用的网络测速工具简介
  13. uni-app开发桌面应用
  14. IOL2020中国初选第一题题解
  15. C语言 身份证号解析年龄和性别
  16. jquery 遍历java对象_jquery中object对象循环遍历的方法
  17. 一个关于农历的算法----js实现【转】
  18. 【移动安全技术】_第四站_登陆框UI设计
  19. linux:Nginx+https双向验证(数字安全证书)
  20. Parsing error: Cannot read file ‘e:\.....\tsconfig.json‘. eslint

热门文章

  1. 谷歌母公司投资成绩:4大机构各有侧重,投资2个马斯克项目
  2. 为什么说特斯拉研发自动驾驶AI芯片应该引起注意?
  3. AI公共政策成全球热点,美国ITI发布《人工智能政策原则》|AI观察
  4. 知乎热帖:Qt 这么强大为什么火不起来?
  5. 给定一个字符串s,返回去掉子串mi后的字符串。
  6. Mac OS X 下连接CMCC无法弹出登陆页面问题
  7. vim介绍,vim颜色显示,vim一般模式下移动光标,vim一般模式下的复制、剪切和粘贴...
  8. Python模块与类
  9. 2011年 软件所信息安全国家重点实验室复试回忆
  10. shell实现批量在多台windows服务器上执行同一命令并获取返回结果