在向Flask发出jQuery AJAX请求后渲染Jinja

Mic*_*rie 5 python ajax jquery flask flask-sqlalchemy

我有一个Web应用程序,当HTML中的select元素发生更改时,它会从Flask获取动态数据.当然这是通过jquery ajax完成的.没有probs在这里我得到了.

问题是,Flask发送的动态数据Flask-sqlalchemy数据库中的对象列表.

当然,数据是从Flask发送的JSON.

我想迭代这些对象以使用Jinja显示他们的信息.

HTML

<select id="#mySelect">
    <option value="option1" id="1">Option 1 </option>
    <option value="option2" id="1">Option 2 </option> 
    <option value="option3" id="3">Option 3 </option>
</select>
Run Code Online (Sandbox Code Playgroud)

jQuery的

$('body').on('change','#mySelect',function(){
   var option_id = $('#mySelect').find(':selected').attr('id');
   $.ajax({
     url: "{{ url_for('_get_content') }}",
     type: "POST",
     dataType: "json",
     data: {'option_id':option_id},
     success: function(data){
       data = data.data;
      /* HERE I WANT TO ITERATE THROUGH THE data LIST OF OBJECTS */
     }

   });
});
Run Code Online (Sandbox Code Playgroud)

烧瓶

@app.route('/_get_content/')
def _get_content():
    option_id = request.form['option_id']
    all_options = models.Content.query.filter_by(id=option_id)
    return jsonify({'data': all_options})
Run Code Online (Sandbox Code Playgroud)

PS:我知道jinja首先被渲染,因此没有办法将jQuery变量分配给Jinja.那么如果我不能在Jinja中使用它,我将如何迭代数据列表呢?

Mic*_*rie 14

好的,我明白了.

简单地说,我制作了一个外部html文件并添加了所需的jinja模板.

{% for object in object_list %}
   {{object.name}}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

然后在我的Flask文件中,我逐字地将render_template响应返回给jquery(其中包含我想要追加的HTML)

objects_from_db = getAllObjects()
return jsonify({'data': render_template('the_temp.html', object_list=objects_from_db)}
Run Code Online (Sandbox Code Playgroud)

然后只需将响应中的HTML附加到要更新的所需div即可.