2016-12-01 102 views
0

我有一个Flask应用程序,我正在与JS集成。我app.py文件看起来像这样:烧瓶渲染模板重复HTML

import urllib 
import requests 
import time 
from es import book 

from flask import Flask, render_template, request, jsonify 

app = Flask(__name__) 

@app.route("/") 
def index(): 
     current_origin = jsonify(book()) 
     return render_template('index.html', current_origin=current_origin) 

if __name__ == "__main__": 
    app.run(host='0.0.0.0', debug=True ,port=5000) 

和相应的JS是这样的:

$(document).ready(function() { 
    console.log("ready!"); 

    $('#try-again').hide(); 

    // gets values from flask 
    $.ajax({ 
     type: "GET", 
     url: "/", 
     success: function(data) { 
     $('#results').append(data); 
     console.log(data); 
     }, 
     error: function(error) { 
     console.log(error); 
     } 
    }); 
}); 

该控制台打印从调用相应的数据es import book,但所呈现的页面只是不断重复没有数据值的HTML(附加到正确的div但没有我期望的数据的HTML的无尽重复)。我尝试了$('#results').append(data)的几个变种,以包含.html(data),.text(data)等,但我不明白我在这里做错了什么。

回答

0

我看到发生了什么。您需要分离呈现页面和返回AJAX数据的端点。试试这个:

@app.route("/") 
def index(): 
    return render_template('index.html') 


@app.route("/get_book") 
def get_book(): 
    return jsonify(book()) 

然后改变你的AJAX调用的组件url

url: "{{ url_for('get_book') }}", 

jsonify()返回一个Response对象。 render_template()使用jinja渲染html页面。您的代码不断插入相同的源HTML文件,触发无限循环。您只应使用render_template()来呈现HTML页面并使用jsonify()将数据发送到XHR调用。

+0

酷!一个小调整,它的工作。我不得不改变'url:“{{url_for('get_book')}}”,'改为'url:“/ get_book”',它就像一个魅力一样。感谢您的帮助,我将不得不重新审视烧瓶端点文档,直到现在,我错过了这个概念。 – nmacc

+0

啊......好的。其实我不确定你的JS是否在渲染的index.html文件中。 '{{}}'语法是Jinja2,所以如果它是一个不起作用的静态资源。很高兴我能帮上忙。 – abigperson