TypeError при передаче переменной из одной функции в другую в Flask - PullRequest
0 голосов
/ 05 мая 2020

Я создал 2 маршрута в моем Flask приложении, которое принимает значение из первой функции, а затем дальнейшие операции выполняются на втором маршруте, но я получаю сообщение об ошибке TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'

Вот мой файл routes.py

@app.route('/getdetails', methods=['GET', 'POST'])
def getdetails():
    if request.method == 'POST':
        name = request.form['name']
        sems = request.form['sems']
        sems=int(sems)
        return render_template('new.html', n=name, s=sems)
    return render_template('index.html')

@app.route('/getmarks', methods=['GET', 'POST'])
def getmarks():
    sems = request.args.get('sems')
    sems = int(sems)
    for i in range(sems):
        if request.method == 'POST':
            sgp = request.form['sgpa']
            sgp = int(sgp)
            marks.append(sgp)
    return render_template('getmarks.html', s=sems, marks=marks)

также здесь html шаблон

{% block content %}

<form name="inputmarks" action="/getmarks" method="POST" style="width: 500px; margin: auto">
    {% for i in range(s) %}
        <label>SGPA {{i}}: </label>
        <input type="text" name="sgpa" class="form-control">
        <input type="submit" value="Lets Go">
    {% endfor %}    
</form>

Переменная, которую я запрашиваю, имеет тип 'int', но затем, когда я печатаю тип он показывает мне тип как «Нет типа». Как мне это исправить?

переменная sems - это значение, которое я запрашиваю

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Проблема, скорее всего, в самом начале функции getmarks.

@app.route('/getmarks', methods=['GET', 'POST'])
def getmarks():
    sems = request.args.get('sems')
    sems = int(sems)

Способ получения значения sems, скорее всего, несовместим с формой, которую вы при условии, и в результате sems оказывается None, что приводит к ошибке при вызове int().

Почему это происходит? Это связано с тем, что опубликованные данные не сохраняются в HTTP-вызовах. Тот факт, что в запросе, обработанном getdetails, было отправлено значение поля sems (я предполагаю, что так оно и было, даже если вы не предоставили для этого форму HTML), не означает, что то же значение будет автоматически передаваться (как значение в form или args) в последующие HTTP-запросы, включая тот, который обрабатывается getmarks.

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

  • Вы можете создать невидимое поле во второй форме с тем же именем, что и в первой форме, и установить для него начальное значение, равное значение, отправленное первым запросом. Для этого потребуется, чтобы вы обращались к этому полю через свойство form запроса Flask, а не через свойство args.
  • Вы можете сделать значение частью цели формы как GET- аргумент стиля. Однако я бы не рекомендовал этот метод.
0 голосов
/ 05 мая 2020

Вероятно, ошибка возникает из-за второй из этих двух строк:

sgp = request.form['sgpa']
sgp = int(sgp)

Отправленная форма либо пуста, либо не передает текстовое значение.

Попробуйте добавить печать оператор для проверки первого значения sgp

sgp = request.form['sgpa']
print('sgp =', sgp)
sgp = int(sgp)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...