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

dte*_*ter 5 python templates jinja2 flask bokeh

在烧瓶函数中渲染模板后,元素是否可以动态更改,即无需重新渲染模板?

假设我有这个烧瓶页面:

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

然后在模板中:

{{divcontent}}
Run Code Online (Sandbox Code Playgroud)

即使回调成功更改了flask 中的div 内容变量,页面也不会更新。我说这是因为页面在第一次加载时已经呈现,因此内容没有动态更新,我说得对吗?

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

script, div = components(fig, INLINE)
return render_template('index.html', script=script, div=div)
Run Code Online (Sandbox Code Playgroud)

但我在同一页面上也有一个下拉菜单,如果更改,应该更改绘图,因此在下拉回调中,我通过使用现在新的“无花果”调用组件函数来“重新生成”脚本和 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)
Run Code Online (Sandbox Code Playgroud)

这是与问题的一部分类似的问题,其中 OP 询问如何将滑块值发送回 jinja。Javascript 回调是“解决方案”之一,但是就像我上面说的那样,我无法“更新”jinja 元素。