flask:如何让POST端点正确重定向

时间:2013-08-07 19:54:51

标签: javascript python html request flask

Flask中有一个稍微复杂的端点,当前部署到服务器:

@app.route('/whatever', methods=['GET', 'POST'])
def somefunct:
    if request.method = 'POST':
        << do some stuff >>

    << do some other stuff >>
    return render_template('sometemplate.html', **<<variable dict>>)

推送到一个模板。

sometemplate.html有点棘手,它包含一个从变量字典中提取数据的表,还提供了一个允许用户与之交互的下拉列表:

{% for item in << variable in dict >> %}

...

<td>
    <form name="category-form" id="category-form-{{ item }}" action="/whatever">
        <select name="{{ item }}" id="{{ item }}">
            <option value="1">Option 1</option>
            <option value="2">Option 2</option>
            <option value="3">Option 3</option>
        </select>
    </form>
</td>

然后我有一些javascript来触发正确的POST操作(加载jQuery):

$(document).ready(function() {
    {% for item in << variable in dict >> %}

    var form{{ item }} = $('category-form-{{ item }}');

    form{{ item }}.find('#{{ item }}').change(function(){
        $.ajax({
            type: "POST",
            url: form{{ item }}.attr('action'),
            data: form{{ item }}.serialize(),
            success: function(response){
                console.log("calling {{item}}")
            }
        });
    });

    {% endfor %}
});

所有这些在开发环境中都能正常工作,但是当我推送到我们的服务器时,我在javascript控制台中出现500错误。我怀疑是request对象发生了一些时髦的事情 - 我已经能够缩小范围,当我尝试解析它时,我收到的错误是我之前没有得到的。< / p>

作为我的故障排除的一部分,由于我正在运行Apache服务器并且无法轻松访问输出,因此我认为重做端点可能是明智之举:

@app.route('/whatever', methods=['GET', 'POST'])
    if request.method = 'POST':
        << do some stuff >>
        variable = << variable to test >>
        return render_template('test.html', **{"variable"=variable})

    << do some other stuff >>
    return render_template('sometemplate.html', **<<variable dict>>)

并将test.html设置为:

{{ variable }}

(周围有正确的块等)

但是,当我尝试实现此功能时,在从下拉列表中选择某些内容后,它不会重定向到test.html,尽管我可以从javascript控制台和return语句的创造性使用中看出来在我的代码中,它正在跟踪端点的正确部分。

我的猜测是这与我的javascript设置方式有关,但基本上我希望能够重定向到test.html以查看请求对象的外观以及为什么它是格式错误。

如何在此上下文中进行重定向?

当然,如果你有任何关于为什么这个代码在localhost工作时无法在服务器上运行的想法,我也会全力以赴:)

0 个答案:

没有答案