欢迎来到山村网

Django中几种重定向方法

2019-03-02 12:08:40浏览:677 来源:山村网   
核心摘要:  这篇文章主要介绍了Django中几种重定向方法,本文讲解了使用HttpResponseRedirect、redirect、reverse以及配置文件中配置URL

  这篇文章主要介绍了Django中几种重定向方法,本文讲解了使用HttpResponseRedirect、redirect、reverse以及配置文件中配置URL等方法,需要的朋友可以参考下

  这里使用的是django1.5

  需求: 有一个界面A,其中有一个form B, 前台提交B之后,后台保存数据之后,返回界面A,如果保存失败需要在A界面提示错误。

  这里就需要后台的重定向,而且需要可以带着参数,也就是error message

  这里收集了几种方法,简答说下需要那些包,怎么简单使用。

  一、 使用HttpResponseRedirect

  The first argument to the constructor is required – the path to redirect to. This can be a fully qualified URL (e.g.'http://www.yahoo.com/search/') or an absolute path with no domain (e.g. '/search/')。 参数既可以使用完整的url,也可以是绝对路径。

  代码如下:

  from django.http import HttpResponseRedirect

  @login_required

  def update_time(request):

  #pass ... form处理

  return HttpResponseRedirect('/commons/invoice_return/index/') #跳转到index界面

  如果需要传参数,可以通过url参数

   代码如下:

  return HttpResponseRedirect('/commons/invoice_return/index/?message=error') #跳转到index界面

  这样在index处理函数中就可以get到错误信息。

  二、 redirect和reverse

  代码如下:

  from django.core.urlresolvers import reverse

  from django.shortcuts import redirect

  #https://docs.djangoproject.com/en/1.5/topics/http/shortcuts/

  @login_required

  def update_time(request):

  #pass ... form处理

  return redirect(reverse('commons.views.invoice_return_index', args=[])) #跳转到index界面

  redirect 类似HttpResponseRedirect的用法,也可以使用 字符串的url格式 /..inidex/?a=add

  reverse 可以直接用views函数来指定重定向的处理函数,args是url匹配的值。 详细请参见文档

  三、 其他

  其他的也可以直接在url中配置,但是不知道怎么传参数。

   代码如下:

  from django.views.generic.simple import redirect_to

  在url中添加 (r'^one/$', redirect_to, {'url': '/another/'}),

  我们甚至可以使用session的方法传值

  复制代码 代码如下:

  request.session['error_message'] = 'test'

  redirect('%s?error_message=test' % reverse('page_index'))

  这些方式类似于location刷新,客户端重新指定url。

  还没找到怎么在服务端跳转处理函数,直接返回response到客户端的方法。

  2014-11-13 研究:

  是不是之前的想法太死板,重定向,如果需要携带参数,那么能不能直接调用views中 url对应的方法来实现呢,默认指定一个参数。

  例如view中有个方法baseinfo_account, 然后另一个url(对应view方法为blance_account)要重定向到这个baseinfo_account。

  url中的配置:

  复制代码 代码如下:

  urlpatterns = patterns('',

  url(r'^baseinfo/', 'account.views.baseinfo_account'),

  url(r'^blance/', 'account.views.blance_account'),

  )

  复制代码 代码如下:

  @login_required

  def baseinfo_account(request, args=None):

  ​#按照正常的url匹配这么写有点不合适,看起来不规范

  ​if args:

  print args

  return render(request, 'accountuserinfo.html', {"user": user})

  @login_required

  def blance_account(request):

  return baseinfo_account(request, {"name": "orangleliu"})

  需要测试为:

  1 直接访问 /baseinfo 是否正常 (测试ok)

  2 访问 /blance 是否能正常的重定向到 /baseinfo 页面,并且获取到参数(测试ok,页面为/baseinfo 但是浏览器地址栏的url仍然是/blance)

  

  这样的带参数重定向是可行的。

(责任编辑:豆豆)
下一篇:

Python中的文档测试模块

上一篇:

Python的单元测试解析

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com