遇到重定向问题

时间:2011-07-31 13:04:08

标签: python django google-app-engine django-nonrel djangoappengine

我正在使用Djang nonrel和App Engine并且遇到重定向问题。

在我的视图处理程序中进行非常简单的重定向:

@login_required
def dashboard(request):

    if check_if_user_needs_to_import(request.user):

        return redirect("user_welcome")

不是在App Engine中正确重定向,而是在浏览器中返回此消息:

状态:302 FOUND Vary:Cookie Content-Type:text / html; charset = utf-8位置:http://site.appspot.com/user/welcome/

如果我手动在浏览器中再次输入URL,则加载就好了。这似乎只是在使用redirect()函数时出现问题,使用render_to_response()的任何视图都可以正常工作。

其他信息: 我已经尝试过两个重定向('name_of_view') - 它会调用反向URL查找以及重定向('/ path / to / url /'),它应该由redirect()函数解析,该函数是原生的django的。

两种情况都不起作用

3 个答案:

答案 0 :(得分:3)

在Django发送自己的响应之前,您似乎正在向响应输出文本。检查代码中的print语句 - 更有可能是你在调用print,这是你永远不应该在WSGI应用程序中做的。 print的输出在Django应用程序的任何输出之前发送,因此被视为响应的开始。因此,Django发送的标题会输出到正文。

答案 1 :(得分:0)

好的,有些事可能会有所帮助:

  1. 这是在多个浏览器中发生的吗? HTTP状态302是重定向的正确状态,也许您已启用一些调试模式/插件,这会改变浏览器的处理方式?

  2. 您是否有使用相对网址路径的原因?为什么不使用类似的东西:

  3. return redirect('/user_welcome')

答案 2 :(得分:0)

我遇到了类似的问题,最终找到了根本原因。

在您使用的任何重定向功能中,您需要确保打印输出的格式为

  

“状态:302找到\ n位置:http://www.someurl.com \ n \ n”

如果最后没有两个换行符“\ n \ n”,您的重定向将在生产中无法正常工作(尽管它可以在开发服务器上运行)。

关于Nick的评论:你应该依赖你的框架,而不是使用sys.stdout.write或print来输出你自己的东西。然而,有些人喜欢明确(低级)了解正在发生的事情,并且有时需要建立自己的小CGI以满足特定需求。但正如尼克所说,同时混合打印框架显然会导致重大问题: - )