2016-07-23 136 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我有一个下拉选择:

<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> 

我访问选定值在Javascript中这样的:

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

而且在HTML我使用窗体后的结果:

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

我知道HTML按钮被发布,但我不能在Python访问的结果。我是Flask的新手,无法在其他问题或教程中找到问题。任何帮助都会比欢迎。

+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

让我们假设你的Python是正确的,你需要发布到组件的代码会是这样的:

<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那里可以避免:)这是不是动态的,所以例如,如果选择空白,则会发送颜色=“0”的帖子请求

+0

如何用各种'select'提交表单? – vabm

0

由于名誉较低,因此很难直接发帖作为回答,但它应该是评论。

您的选择没有name属性;它永远不会作为POST的一部分发送。给它一个名称的属性以及一个值:

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

可以使用MultiDict.getlist()检索列表中的所有值:

request.form.getlist('layer')