2016-07-23 2 views
2

작은 Flask 응용 프로그램에서 작업 중이며 Python에서 javascript 배열에 액세스하여 csv로 인쇄하는 방법을 찾는 데 문제가 있습니다.Python/Flask에서 javascript 변수를 반환하십시오.

내 플라스크 파일의 일반 설정 (나는,이 작동하는지 확인하기 위해 콘솔에 인쇄하려고 다음 나중에 CSV로 쓸 수 있습니다)입니다 :

from flask import Flask, render_template, request 
@app.route('/assemblies', methods=['GET', 'POST']) 
def assemblies(): 
    myColours = request.form.get('colours', type=str) 
    print myColours 
    return render_template('assemblies.html') 
if __name__ == '__main__': 
    app.run(debug=True) 

그런 다음 내 html로 I에

<select id="Layer1"> 
    <option value="0">Empty</option> 
    <option value="1">Blue</option> 
    <option value="2">Red</option> 
    <option value="3">White</option> 
    <option value="4">Gray</option> 
</select><br> 

이 같은 자바 스크립트에서 선택된 값에 액세스 :

function getColours() { 
    var c = document.getElementById("Layer1"); 
    var colour = c.options[c.selectedIndex].value; 
    return colour; 
} 

과의 드롭 다운 선택이

<form method="post"> 
    <button onclick="getColours()" type="submit" value="colour">Click me</button>  
</form> 

내가 HTML 버튼을 게시 알고하지만 난 파이썬에서 결과에 액세스 할 수 없습니다 : HTML 나는 결과를 게시 할 양식을 사용합니다. 나는 플라스크에 익숙하지 않으며 다른 질문이나 튜토리얼에서 문제를 찾을 수 없습니다. 어떤 도움이라도 환영 할 만하다.

+1

나는 비슷한 질문을 가지고있다 : http://stackoverflow.com/questions/32390539/how-to-pass-javascript-variable-to-macros-in-jinja2-template 희망이 있으면 도움이된다. – Rohanil

+0

게시 위치는 어디입니까? 액션이 정의되어 있지 않으며 그 방법이 아닙니다. –

+0

많은 색상 또는 하나의 색상을 선택 하시겠습니까? – roy

답변

1
from flask import Flask, request, render_template 

app = Flask(__name__) 

@app.route('/assemblies') 
def assemblies(): 
    mycolours = request.form.get('colours') 
    return render_template('assemblies.html', mycolours=mycolours) 

@app.route('/select') 
def select(): 
    return render_template('select.html') 
if (__name__ == "__main__"): 
    app.run(debug=True) 

select.html

<form action="/assemblies" method=['GET', 'POST']> 
    <select name="colours"> 
     <option value="0">Empty</option> 
     <option value="1">Blue</option> 
     <option value="2">Red</option> 
     <option value="3">White</option> 
     <option value="4">Gray</option> 
    </select> 
    <br> 
    <input type="submit" value="submit">  
</form> 

어셈블리에 이름 속성뿐만 아니라 값을 제공 .html 템플릿 :

<p>{{mycolours}}</p> 

mycolours에 대한 출력은 선택한 값입니다. 예를 들어 empty을 선택하면 0이 인쇄되고 white을 선택하면 3이 인쇄됩니다.

+0

그 트릭을했다, 고마워. 원 클릭으로 다양한 '선택'이 포함 된 양식을 제출하는 방법은 무엇입니까? (예 : colours1, colours2, colours3 등) – vabm

1

의 당신의 파이썬이 바로 가정하자이 같은 것 코드를 어셈블리 게시해야합니다

<form action="/assemblies" method="post"> 
    <select name="colours"> 
    <option value="0">Empty</option> 
    <option value="1">Blue</option> 
    <option value="2">Red</option> 
    <option value="3">White</option> 
    <option value="4">Gray</option> 
    </select> 
    <br> 
    <button type="submit">Click me</button>  
</form> 
그것을 피할 수있는 위치

JS 피해야한다 :)이 그렇게 뭔가 동적이지 비어 있음을 선택하면 예를 들어 colors = "0"의 게시물 요청을 보내 게됩니다.

+0

다양한 '선택'이있는 양식을 제출하는 방법은 무엇입니까? – vabm

0

평판이 좋지 않아 직접 답변을 드려 죄송합니다.

선택에는 name 속성이 없습니다. POST의 일부로 전송되지 않습니다.

<select id="Layer1" name="layer"> 

당신은 MultiDict.getlist()를 사용하여 목록의 모든 값을 검색 할 수 있습니다 :

request.form.getlist('layer') 
관련 문제