Python / Flask Как использовать URL как переменную, которая ссылается на словарь - PullRequest
0 голосов
/ 03 октября 2018

Я новичок во 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 голосов
/ 03 октября 2018

Я не уверен, правильно ли я понял или нет.

Но я сделаю попытку, дайте мне знать, если вам это нужно или нет, так что, если это не так, я могу обновить ответ!

Прежде всего я вижу, что вы принимаете 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>

Что касается URL, я полагаю, что вы используете его, чтобы вернуться на страницу вопросов, если ответ не был правильным, все, что вам нужно сделать, это from flask import url_for, и использовать его как

url_for('ask_questions', question_number=1)

Вы можете использовать любое другое число, вы даже можете иметь номер в качестве переменной

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...