django render_to_response 重定向到另一个视图

1 投票
2 回答
4513 浏览
提问于 2025-04-17 18:17

我刚开始学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 个回答

0

理解“URL”

你问:

在使用 render_to_response 的同时,能否改变浏览器中的URL?

我觉得你对“URL”这个概念理解得有点模糊。简单来说,当浏览器请求一个URL X 时,它会把你发送的任何东西都当作这个URL X 的响应,不管那是什么。

所以,如果服务器(也就是你)发送了实际的HTML内容,浏览器中的URL是不会改变的。

如果你想让浏览器中的URL发生变化,你需要发送一个重定向响应(使用Django的 HttpResponseRedirect)给浏览器。浏览器会获取到里面的URL Y,然后再向服务器发起一个新的请求,这个请求的URL就是 Y,这时浏览器的地址栏也会显示这个新的URL。

接着,服务器会发送URL Y 对应的HTML内容。你不能在一个请求中同时完成这两个步骤:重定向和发送内容。

3

HttpResponseRedirect 可以用来把用户引导到一个不同的网址。

render_to_response 是“用给定的模板和上下文字典来渲染一个页面,并返回一个包含渲染后内容的HttpResponse对象。”

如果用户最终会忽略响应的内容,直接去另一个网址,那就没有必要把模板渲染成响应了。

更好的做法是,先把用户重定向到正确的网址,然后再从那个网址对应的视图中提供渲染后的内容。

撰写回答