在页面加载后第二次Render_template

时间:2016-03-24 18:55:27

标签: python ajax flask rendering jinja2

我正在尝试通过我的网站查询数据库,并使用Jinja模板动态添加结果列。我正在使用flask和我的视图功能。我正在渲染像这样的值

return render_template('query.html',my_list=my_list )

问题是,当我加载页面时,用户还没有查询数据库,所以my_list为空。用户通过按下html页面上的按钮并通过jquery发出ajax请求来查询数据库。我现在的问题是,即使页面已经加载,也可以使用jinja模板返回my_list,这意味着我必须第二次返回render_template(在提交按钮之后)以获取my_list的值。

P.S。我不想使用json解析。

以下是一些示例代码。我使用列SubmitterID的intranetID和平台列平台的值查询数据库,以使用其余列的值将整个条目返回到数据库。

@app.route('/querydbvalues',methods=['POST', 'GET'])
def querydbvalues():
  if request.method == 'POST' or  request.method == 'GET':
    results = models.mydatabase.query.filter_by(SubmitterID=qIntranetID,Platforms=qPlatform).all()
    my_list = [i.user for i in results]
    return render_template('query.html',my_list=my_list ) 

并在我的html页面上

{% for n in my_list %}
<li>{{n}}</li>
{% endfor %}
当您按下按钮时,在Javascript文件上

我发出了像这样的ajax请求

$("#SearchDatabase").click(function(){
    var tmp = document.getElementById("qIntranetID").value;
    var tmp2 = document.getElementById("qPlatform").value;
    jQuery.ajax({
        dataType: "json",
        url:"/querydbvalues", //tell the script where to send requests
        data:{text:tmp,text2:tmp2},
        type:'GET',
        contentType: 'application/json',
        success: function(results){
            //do something
        }
    });
});

1 个答案:

答案 0 :(得分:0)

Ajax调用是一个完全独立的请求。您可以在该请求中执行您想要的操作,包括渲染模板。