2016-12-01 105 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