Python / Flask如何将URL用作链接到字典的变量

时间:2018-10-03 16:25:44

标签: python dictionary url flask

我是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,然后再将该数字链接到字典的方法-完全丢失了!

有人能指出我的方向吗?

谢谢。

1 个答案:

答案 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)

您可以使用任何其他数字,您甚至可以将该数字用作变量