1

我正在使用 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 响应 ok。但是浏览器显示一个空白的 html 页面(空的正文标签)。

在生产/heroku 服务器上,我得到了响应,所以我不认为代码本身有问题,而是我的设置文件有问题。我回顾了heroku django设置指南,并在我的本地机器上使用了一个环境变量来关闭这些设置,如果我在本地开发中,但我仍然遇到这个问题。

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

谢谢。

根据评论中的要求,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>
4

1 回答 1

0

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

对于那些不知道的人来说,Django 消息系统是一种将详细信息添加回原始请求对象的方法。这是一个狙击手

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 %}

循环并显示您的消息,但您希望。我希望这可以帮助别人。

于 2013-08-16T13:52:03.890 回答