2016-12-01 1 views
0

나는 플라스크 애플리케이션을 가지고 있는데, 나는 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의 끝없는 반복이지만 예상 한 데이터가 없음). .html (데이터), .text (데이터) 등을 포함하기 위해 $('#results').append(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()는 응답 객체를 반환합니다. render_template()은 jinja를 사용하여 html 페이지를 렌더링합니다. 코드는 동일한 소스 HTML 문서를 자체에 삽입하여 무한 루프를 트리거합니다. HTML 페이지를 렌더링하려면 render_template()을 사용해야하고 XHR 호출에 데이터를 보내려면 jsonify() 만 사용해야합니다.

+0

쿨! 사소한 비틀기와 그것이 효과. 나는'url : "{url_for ('get_book')}} ''을'url :"/ get_book "으로 변경해야만했고, 매력처럼 작동했다. 도움을 주셔서 감사합니다. 지금까지이 개념을 놓친 플라스크 엔드 포인트 문서를 다시 살펴보아야합니다. – nmacc

+0

아 ... 좋아. 사실 JS가 렌더링 된 index.html 파일 내에 있는지 확실하지 않았습니다. '{{}}'구문은 Jinja2이므로, 작동하지 않는 정적 리소스 인 경우. 다행스럽게 도울 수 있어요. – abigperson

관련 문제