django render_to_response 重定向到另一个视图
我刚开始学django
我有一个用来重定向用户到正确网址的render_to_response。但是在浏览器中,网址并没有改变,所以它还是被错误的视图处理了...
这是我的代码
return render_to_response('newworkflow.html/',
{'form':form,},context_instance=RequestContext(request))
这是我的网址配置:
url(r'newworkflow/$','access_mgmt.views.newworkflowform'),
url(r'newuser/$','access_mgmt.views.newuser'),
在newworkflow.html
页面上,我有一个表单,但这个表单并没有被正确的视图处理,实际上是被那个使用render_to_response的视图处理了。
有没有办法在使用render_to_response
的时候,同时改变浏览器中的网址呢?
我使用render_to_response是因为在源页面和目标页面上我都启用了csrf_token。
2 个回答
理解“URL”
你问:
在使用
render_to_response
的同时,能否改变浏览器中的URL?
我觉得你对“URL”这个概念理解得有点模糊。简单来说,当浏览器请求一个URL X
时,它会把你发送的任何东西都当作这个URL X
的响应,不管那是什么。
所以,如果服务器(也就是你)发送了实际的HTML内容,浏览器中的URL是不会改变的。
如果你想让浏览器中的URL发生变化,你需要发送一个重定向响应(使用Django的 HttpResponseRedirect
)给浏览器。浏览器会获取到里面的URL Y
,然后再向服务器发起一个新的请求,这个请求的URL就是 Y
,这时浏览器的地址栏也会显示这个新的URL。
接着,服务器会发送URL Y
对应的HTML内容。你不能在一个请求中同时完成这两个步骤:重定向和发送内容。
HttpResponseRedirect
可以用来把用户引导到一个不同的网址。
render_to_response
是“用给定的模板和上下文字典来渲染一个页面,并返回一个包含渲染后内容的HttpResponse对象。”
如果用户最终会忽略响应的内容,直接去另一个网址,那就没有必要把模板渲染成响应了。
更好的做法是,先把用户重定向到正确的网址,然后再从那个网址对应的视图中提供渲染后的内容。