我是Flask的新手,所以我会尽力向自己解释。
我正在使用Python / Flask创建测验应用程序。基本上,我希望HTML模板根据URL中的问题编号显示问题。
我将我的问题和答案存储在这样的元组字典中:
[{question 1, answer 1}, {question 2, answer 2}, {question 3, answer 3}]...
我希望我的结构看起来像这样:
@app.route('/<username>/<question_number>', methods=["GET", "POST"])
def ask_questions(question_number):
questions = get_all_questions()
return render_template("riddle1.html", question=questions, question_number=1)
请注意,get_all_questions()函数返回问题/答案的字典。
HTML:
<body>
<h1>Welcome, {{ username }} to RiddleMeThis!</h1>
<p>{{ question[i][0] }}</p>
<form method="POST">
<label for="guess">Answer:</label>
<input type="text" id="guess" name="guess">
<button>Enter</button>
</form>
</body>
这个想法是,如果URL的值为1,它将从元组字典中拉出问题,该字典将为[0] [0]。对于问题2,[1] [0],对于问题3 [2] [0],依此类推。
在回答该页面时,将重定向到将用户答案与元组中的答案进行比较的页面。如果正确,它将被重定向到最后一页,但现在等于2,如果不正确,它将被直接带回到最后一页。
我对此进行了几次旋转,并且确实在努力找出如何首先将数字插入URL,然后再将该数字链接到字典的方法-完全丢失了!
有人能指出我的方向吗?
谢谢。
答案 0 :(得分:1)
我不确定我是否正确。
但是我会给您一个机会,让我知道您是否需要它,如果没有,我可以更新答案!
首先,我看到您正在接受POST
请求!
@app.route('/<username>/<question_number>', methods=["GET", "POST"])
def ask_questions(question_number):
if request.method == 'POST':
do_stuff_like_checking_the_answer_and_redirect_to_new_page_or_reload_the_same_page()
if request.method == 'GET':
questions = get_all_questions()
return render_template("riddle1.html", question=questions, question_number=question_number)
由于您要将整个列表发送到模板并使用数组索引,因此需要使用以下内容:
<body>
<h1>Welcome, {{ username }} to RiddleMeThis!</h1>
<p>{{ question[question_number][0] }}</p>
<form method="POST">
<label for="guess">Answer:</label>
<input type="text" id="guess" name="guess">
<button>Enter</button>
</form>
</body>
关于网址,如果答案不正确,我猜想您正在使用它返回问题页面,您需要做的只是from flask import url_for
,并像这样使用它
url_for('ask_questions', question_number=1)
您可以使用任何其他数字,您甚至可以将该数字用作变量