首页 文章

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

提问于
浏览
4

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

说我有这个烧瓶页面:

@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)

但是我在同一页面上也有一个下拉菜单,如果改变了,应该更改情节,所以在下拉回调中我通过用现在新的'fig'调用组件功能来“重新生成”脚本和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回调是'solution'之一,但就像我上面所说,我'm unable to '更新'jinja元素 .

1 回答

  • -1

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

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

相关问题