Django Development Server,Post方法上的空白HttpResponse

时间:2013-08-11 13:57:14

标签: python django heroku django-views

我正在使用Heroku的工具和指南在Django中开发一个应用程序,并且遇到了一个问题。在我的本地开发环境中,如果我使用post方法,我无法从我的视图中获得响应。目前我正在使用一个简单的表单将一组ID发布到视图中。

def webinarToHS(request):
errors = []
if request.method == 'GET':
    webinars = get_upcoming_webinars()
    return render_to_response('webinarToHS.html', {'webinars': webinars.json(), 'length': len(webinars.json())/2}, RequestContext(request))
elif request.method == 'POST':
    method = request.method
    return HttpResponse("test")

在控制台中,它返回200响应确定。但是,浏览器显示一个空白的html页面(空体标签)。

在production / heroku服务器上,我收到了回复,因此我不相信代码本身存在问题,而是使用我的设置文件。我回过头来通过heroku django设置指南,并在本地机器上使用环境变量来关闭这些设置,如果我在本地开发,但我仍然遇到这个问题。

有谁能给我一个线索,从哪里开始寻找修复?我正在使用virtualenv包装器运行Windows 7,python 2.7.5和django 1.5

感谢。

根据评论中的要求,WebinarToHS模板文件如下:

<html>
<head>
    <title>Add Webinars to Hubspot</title>
    <style>
        html, body {background-color: #eee;}
        #wrapper {background-color: #fefefe; width:60%; margin:0 auto; position:relative; margin-top:50px; padding:25px;}
        form {text-align:center;}
        label {font-weight:bold;}
        .submit {float:right;}
        .check {float:left; text-align:left; max-width:48%; margin-right:2%;}
    </style> 
</head>
<body>
    <div id="wrapper">
        <form name="form" action="{%url 'G2WApi.views.webinarToHS' %}" method="post">
            {% csrf_token %}
            <label for="webinarKey">Choose the Webinar(s) you would like to add to hubspot:</label><br/><br/>
                <div class="check">
                {% for webinar in webinars %}
                    <input type="checkbox" name="webinars[]" value="{{ webinar.webinarKey }}" />{{ webinar.subject }}<br/>
                    {% if forloop.counter|divisibleby:length %}
                        </div><div class="check">
                    {% endif %}
                {% endfor %}
            </div>
            <div style="clear:both; height:10px;"></div>
            <input class="submit" type="submit" value="Add to Hubspot" />
        </form>
    </div>
</body>
</html>

1 个答案:

答案 0 :(得分:0)

虽然它实际上并没有解决手头的问题,但我找到了一种比我想做的更好的方法。我发现我的代码中POST方法的所有内容都有效,除了模板的输出或渲染。 HttpRedirection工作,还有Django消息系统。我找到了一个如何使用它的教程,它非常适合将响应发布回原始模板。

Django Messaging系统,对于那些不知道的人来说,是一种将细节添加回原始请求对象的方法。这是一个片段

messages.success(request, "success message")
return HttpResponseRedirect(request.path)

第一行代码是将消息附加到请求对象(在这种情况下是传递给视图的那个),然后在第二行代码中我们只是重定向回请求路径。 Django处理你需要添加一些代码到模板的所有其余部分,如下所示:

{% if messages %}
<ul class="messages">
  {% for message in messages %}
  <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
  {% endfor %}
</ul>
{% endif %}

按照您的意愿循环显示您的消息。我希望这可以帮助别人。