2014-11-24 18 views
1

웹 응용 프로그램을 만드는 중입니다.Flaskr url_for가 javascript에서 python으로 호출 될 때 작동하지 않는 매개 변수 사용

자바 스크립트에서 저는 파이썬 스크립트에 대한 ajax 호출을 처리하고 결과를 응답으로 보냅니다. /process /는 json으로 전송되는 값, 즉 value1과 value2를 처리하기위한 python 스크립트의 경로입니다. 나는 '결과'에서 json 설정 값으로 응답을 되돌려 보냅니다.

아약스의 성공 블록에서 값은 name_value에 저장되며 이것은 매개 변수로 파이썬 라우팅 메소드에 전달되어야합니다.

자바 스크립트 :

$.ajax({ 
     type: "GET", 
     url: "/process/", 
     contentType: "application/json; charset=utf-8", 
     data: { "value1" : value1, 
       "value2" : value2 
       }, 
     success: function(data) { 
      var name = data.result; 
      console.log(name); 
      window.location.href = "{{url_for('/process2', name=name)}}" 
     } 
    }); 

파이썬 스크립트 매개 변수가 url_for에 전달되는 경우 내가이 경우 매개 변수 값을 수신되지 않는 경우

app.route("/process2/<name>") 
def process2(name): 
    print name 
    render_template("user.html", name=name); 

. 매개 변수를 하드 코드하면 파이썬 스크립트에서 매개 변수 값을받을 수 있습니다.

window.location.href = "{{url_for('/process2', name='helloworld')}}" 

어떤 도움을 주셔서 감사합니다. 미리 감사드립니다. 경험에서

+1

JS가 템플릿에 렌더링되었거나 정적 파일에 있습니까? Jinja가 url_for를 실제 URL 문자열로 바꾸는 유일한 방법은 템플릿에 포함 된 경우입니다. – Celeo

+0

예 .. 템플릿에서만 렌더링됩니다. 템플릿 폴더 내 자바 스크립트가 내 HTML 파일이 포함되어 있습니다. – bhoo

답변

1

, 나는 신사처럼, 자바 스크립트 변수를 사용하지 수 배운 다음

window.location.href = "{{ url_for('/process2', name=name) }}"

내가 그것에 대해 잘못 생각하면, 누군가가 저를 수정하시기 바랍니다 그리고 당신은 나의 가장 친한 친구가 될 것이다 SO 커뮤니티.

편집 :

파이썬 :

from flask import jsonify, url_for 

@app.route("/process", methods=['GET', 'POST']) 
def process():  
    name = 'bubba' # code to get the name 
    return jsonify({ 
     'result': url_for('process2', name=name), 
     'name': name 
    }) 

@app.route("/process2/<string:name>") 
def process2(name): 
    print name 
    render_template("user.html", name=name); 

자바 스크립트 : 제이슨 하이네가 언급 한 바와 같이

, 당신은 JSON의 결과로 url_for 방법에 전달하여 당신이 원하는 것을 달성 할 수

$.ajax({ 
    type: "GET", 
    url: "/process", 
    contentType: "application/json; charset=utf-8", 
    data: { "value1" : value1, 
      "value2" : value2 
      }, 
    success: function(data) { 
     var route = data.result; 
     var name = data.name; 
     console.log(route, name); 

     window.location.href = route; 
    } 
}); 

더 이상의 질문이 있으시면문서를 참조하십시오.

+0

아니면 "process"경로에서 url_for를 수행하고 ajax 호출로 반환하고 해당 데이터를 가져 와서 location.href로 전달할 수 있습니다. – CodeLikeBeaker

+0

아! 내가 왜 그렇게 생각하지 않았어? 정보 주셔서 감사합니다 – Wondercricket