Передача пользовательского ввода из формы HTML через функцию Python для определения переменных в Flask - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь создать сайт в Flask, который:

  • Принимает ввод пользователя
  • Проверяет, соответствует ли ввод пользователя клавише в словаре
  • Возвращает страницу со всеми соответствующими значениями

Пока у меня есть это:

@app.route('/')
def home():
    return render_template("index.html")

и индекс. html:

<!DOCTYPE html>
<form action = "/">
    WHAT ANIMAL DO YOU WANT? <br>
    <input type = "text" name = "animal"><br>
    <input type = "submit" value = "submit">
</form>

Я также импортировал созданный мной словарь (animal_dict), который выглядит примерно так:

animal_dict = {
1: {'Name':'Dog', 'Kingdom':'Animalia', 'Species':'C. lupus'}, 
2: {'Name':'Cat', 'Kingdom':'Animalia', 'Species':'F. catus'}, 
3: {'Name':'Squirrel', 'Kingdom':'Animalia', 'Species':'E. sibiricus'}, 
4: {'Name':'Brown Trout', 'Kingdom':'Animalia', 'Species':'S. trutta'}
}

Мой подход заключался в создании страницы, которая проверяла бы, соответствует ли ввод пользователя одному из животных в словарь, а затем определить переменные, которые я мог бы использовать на странице создания информации о животном:

@app.route('/animalpage')
def animalpage():
    for i in animal_dict:
        if request.form['animal'].title() == animal_dict[i]['Name']:
            animal_name = animal_dict[i]['Name']
            animal_kingdom = animal_dict[i]['Kingdom']
            animal_species = animal_dict[i]['Species']
    return render_template('animal_page.html', name = animal_name, kingdom = animal_kingdom, species = animal_species)

и animal_page. html будет выглядеть так:

<!DOCTYPE html>
<title> Here's the Pokemon Data! </title>
    <body>
        <p><h1>{{ name }}</h1></p>
        <p><h1>{{ kingdom }}</h1></p>
        <p><h1>{{ species }}</h1></p>
        <a href="/"> Click me to go back to the home page! </a>
    </body>

Но когда Я запускаю сайт и получаю сообщение об ошибке «UnboundLocalError: локальная переменная« animal_name », на которую ссылаются перед присваиванием»

Я думаю, что это может быть потому, что возвращение для animal_page. html со всеми этими определенными переменными запускается до для л oop. Но я не уверен, как его почистить, чтобы он работал. Я также импортирую animal_dict из другого файла .py, но лучше ли поместить его в этот app.py?

Любая помощь будет оценена. Я также могу уточнить больше, если это будет необходимо. Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Ваше условие не выполняется в операторе if. Попробуйте удалить .title () и попробуйте

, если request.form ['animal'] == animal_dict [i] ['Name']:

Также измените действие на страницу "/ animalpage"

0 голосов
/ 14 марта 2020

Попробуйте поместить return оператор в if условие.

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