在烧瓶中渲染模板后更新Jinja元素

时间:2016-04-15 11:32:33

标签: python templates flask jinja2 bokeh

在刻录功能中渲染模板后,可以动态更改元素,即无需重新渲染模板吗?

说我有这个烧瓶页面:

@app.route("/"):
def index():
  ### generate div content
  ### have a button callback that changes the div content
  return render_template('index.html', divcontent=content)

然后在模板中:

{{divcontent}}

即使回调成功更改了flask中的div内容变量,该页面也不会更新。我是否正确地说这是因为页面首次加载时已呈现,因此内容未动态更新?

在上下文中;我将散景图的div组件嵌入模板中,如下所示:

script, div = components(fig, INLINE)
return render_template('index.html', script=script, div=div)

但是我在同一页面上也有一个下拉菜单,如果更改了,应该更改情节,因此在下拉回调中我会重新生成'脚本和div通过使用现在新的'来回调组件功能,但页面没有显示这些更改,我认为这是因为页面是第一次呈现,所以新的参数脚本和div没有更新。

我也做了类似的多次下拉菜单;即,当在散景窗口小部件中选择一个下拉列表时,它会调用一个回调,该回调应该填充另一个带有自定义列表的下拉列表。以下是实际的回调JS代码:

dropdown2 = Select(title="Parameter:", value="Select parameter", options=['Select parameter'])

callback = CustomJS(args=dict(dropdown2=dropdown2), code="""
    var selValue = cb_obj.get('value');
    $.ajax({
    type: "POST",
    url: "retrieveColumns",
    data:'id='+selValue,
    success: function(data){
        dropdown2.set('options',data.List);
    }
    });
    column_select.set('options','hi');
    column_select.trigger('change');
""")

dropdown1 = Select(title="Choose type:", value="Select type", options=selectList, callback=callback)

对于this问题的一部分,这是一个类似的问题,其中OP询问如何将滑块值发送回jinja。 Javascript回调是其中一个解决方案'但就像我上面所说,我无法更新' jinja元素。

1 个答案:

答案 0 :(得分:-1)

  

我是否正确地说这是因为页面首次加载时已呈现,因此内容未动态更新?

是的,这正是发生的事情。您需要使用javascript / ajax才能动态更新页面。