我正在使用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>
答案 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 %}
按照您的意愿循环显示您的消息。我希望这可以帮助别人。