【发布时间】:2019-11-12 15:53:15
【问题描述】:
我使用 Flask 将 URL 路由到返回模板的函数。 在其中一个函数中,我创建了一个我想在另一个函数中使用的列表。
我尝试在全局范围内声明变量,并在修改它时在函数中将它们声明为全局,但由于我无法具体返回列表,因此更改不适用于全局范围。我已经阅读了this answer,但由于该函数返回的是模板而不是修改后的列表,所以我不知道如何继续。我知道全局变量并不理想,但我碰壁了。
一些简化的代码:
list1 = []
@app.route('/')
def home():
global list1
list1 = [1,2,3]
return render_template('template1.html', list1=list1)
@app.route('/test')
def test():
list2 = copy(list1)
return render_template('template2.html', list2=list2)
我希望 list2 为 [1,2,3]。 当前是 [],引用 home() 函数之前在全局范围内定义的未更改列表。
--- 编辑 ---
对于额外的上下文,我将提供一些更新的代码和更多信息。
我正在尝试使 test1.html 输出 [1,2,3]。
我尝试使用 g 对象,没有用。
test.py
@app.route('/')
def home():
return render_template('test_form.html')
@app.route('/test_results', methods=['POST', 'GET'])
def form_results():
g.allPlayers = []
for i in range(1,4):
g.allPlayers.append(request.form['player'+str(i)])
return render_template('test_results.html',allPlayers=g.allPlayers)
@app.route('/test1')
def test1():
newList = g.allPlayers
return render_template('test1', newList=newList)
test1.html
<html>
<header>
<title>Test</title>
</script>
</header>
<body>
{{newList}}
<br>
<a href="/second">Second<a>
</body>
</html>
test_form.html
<html>
<header>
<title>Template 1</title>
</script>
</header>
<body>
<form method="POST" action="test_results">
<p></p>
{% for i in range(1,4) %}
<input type="text" name={{"player" ~ i}}><br>
{% endfor %}
    <input type="submit">
</form>
</body>
</html>
【问题讨论】: