【问题标题】:Render_template second time after page is already loaded页面加载后第二次渲染模板
【发布时间】:2016-07-12 12:03:34
【问题描述】:

我正在尝试通过我的网站查询数据库并使用 Jinja 模板动态添加包含结果的列。我正在使用烧瓶和我的意见功能。我正在渲染这样的值

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

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

附言我不喜欢使用 json 解析。

这里是一些示例代码。我使用 SubmitterID 列的 IntranetID 和 Platforms 列的平台值查询数据库,以将整个条目连同其余列的值一起返回到数据库。

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

【问题讨论】:

  • 你不需要检查请求方法。 Flask 只会将 GET 和 POST 请求路由到该端点。

标签: python ajax flask rendering jinja2


【解决方案1】:

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

【讨论】:

  • 您好,感谢您的意见。但是我的问题是我想在同一个 html 页面上呈现“my_list”而不刷新或更改到另一个页面。出于某种原因,我不能,这就是我寻求帮助的原因
  • 这就是 Ajax 所做的。您也许应该解释为什么在呈现同一页面时遇到问题,而不是说“由于某种原因我不能”。
  • 我在渲染同一页面时没有问题。我在渲染“my_list”上的值(我在 html 页面之后渲染的第二个参数)以及在我的网页上使用 jinja 模板使用这些值时遇到问题。
  • 恐怕我还是不清楚你在问什么。您小心地隐藏了您的 JS 成功方法:您需要在其中获取 Flask 呈现的结果并将其插入到您现有的页面中。
  • 您好,首先感谢您与我交谈并仍然试图帮助我。通过“return render_template('query.html',my_list=my_list)”我返回我的结果 my_list 并且使用 jinja 模板我可以像上面代码中描述的那样在我的 html 页面上使用 my_list 值。但是,当第一次加载页面时 my_list = [] 并且仅在用户按下提交并且对数据库进行查询时才更改值。一旦我得到我想要 my_list 的值,我想再次返回它们以与 jinja 模板一起使用。这不会发生,我无法返回 my_list 的新值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多