Jinja2加载新数据

时间:2014-08-13 00:30:03

标签: javascript python ajax flask jinja2

我已经花了两天但却无法理解。

每次在print value的{​​{1}}行中打印出不同的值,但一旦通过index()转到html,它似乎不会收到新的不同值。 render_template('index.html', car_value=value)仅保留打印出的第一个接收值,而不是在第一个值之后传递其他值。

请通过console.log(y)index.html

让我知道如何传递并Flask能够接收这些新值

<小时/> 在Amadan的帮助下编辑

Jinja2

并且

def get_data():
    df = sqlio.read_sql(qry1, conn)
    value = df['count'][0]
    return value

@app.route('/get_data', methods=['GET','POST'])
def get_data_route():
    value = get_data()
    return value

@app.route('/get_car_value', methods=['GET'])
def get_car_value():
    data = "{ car_value: %s }" % get_data_route()
    return data, 200, {'Content-Type': 'application/json; charset=utf-8'}

@app.route('/', methods=['GET'])
def index():
    return render_template('index.html')

if __name__ == '__main__':
    app.run(
        port=8000,
        host='0.0.0.0'
    )

仍然无法正常工作......它不会在$(function() { var chart; $('#car_id').highcharts({ chart: { type: 'spline', animation: Highcharts.svg, // don't animate in old IE marginRight: 10, events: { load: function() { var series = this.series[0]; setInterval(function() { var x = (new Date()).getTime(); $.ajax({ type: "GET", url: "/get_car_value", success: function(data) { var y = data.car_value; console.log(y) series.addPoint([x, y], true, true); } }); }, 5000); } } },

中打印出任何内容

1 个答案:

答案 0 :(得分:1)

由于您始终使用AJAX访问相同的URL,因此很可能正在缓存它。尝试在负责数据AJAX的Flask控制器的顶部添加它:

response.headers['Cache-Control'] = 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=0'
response.headers['Pragma'] = 'no-cache'
response.headers['Expires'] = '-1'

或者,您可以将您的网址更改为:

url: "/?" + new Date().getTime(),

因此无法缓存(因为每次都会有所不同)。

编辑:我刚注意到,您在模板中设置了y的值,这与AJAX调用无关。要刷新该值,您必须重新加载页面,AJAX根本不用,因为它获取一些数据,然后忽略它

url: '/get_car_value',
success: function(data) {
  var y = data.car_value;
  console.log(y)
  series.addPoint([x, y], true, true);
}

并制作一个新的控制器:

@app.route('/get_car_value', methods=['GET'])
def get_car_value():
    import json
    data = json.dumps({ car_value: get_data_route() })
    return data, 200, {'Content-Type': 'application/json; charset=utf-8'}

(您可以使用现有的get_data_route控制器,但我喜欢一致的API,并且在使用AJAX传输数据时始终使用JSON非常有用。)

编辑:JSON脑屁。