получить команды запроса из цикла for в бутылке - PullRequest
0 голосов
/ 24 июня 2019

Я собираюсь запрограммировать ментальную арифметическую программу.Поэтому я хочу представить различные упражнения на странице.Случайные упражнения были получены из самодельных функций.Чтобы сравнить ответы, я хочу дать пользователям ввод («значение») в файл JSON.Проблема в цикле for, потому что он просто записывает последний введенный ответ в файл.Возможно, команда запроса застряла там ...

Я попытался расположить поле ввода под циклом for, но это не так, как я хочу, чтобы он выглядел.

Вот изображение того, чтотеперь это выглядит так: screenshot of the form

Код бутылки:

@route('/excercises')
def excercise():
    ex=addsub() 
'''addsub is the function for the random excercises and gaves back a bunch of arrays'''
    return template('tgtry', ex=ex)

@route('/excercises', method='POST')
def proof_excercise():
    with open('addsub.json', 'r') as jsonFile:
        a=json.loads(jsonFile.read())
    ax=[]
    for row in a:
        value = request.forms.get('value')
        num={"user_ans": value}
        ax.append(num)
    with open('answer.json', 'w') as jsonFile:
        jsonFile.write(json.dumps(ax, indent = 4,sort_keys = False, ensure_ascii=False))

Шаблон: tgtry.tpl

<form action="/excercises" method="post">      
    <table>     
        %for row in ex:
         <tr>
             <td>&nbsp;{{row['ex']}}.&nbsp;</td>
             <td>&nbsp;{{row['numb']}}&nbsp;</td>
             <td>&nbsp;{{row['sign']}}&nbsp;</td>
             <td>&nbsp;{{row['numbb']}}&nbsp;</td>
             <td>&nbsp;{{row['signn']}}&nbsp;</td>
             <td>&nbsp;{{row['numbbb']}}&nbsp;</td>
             <td>&nbsp;{{row['signnn']}}&nbsp;</td>
             <td><input name = 'value' type="number" size='12'></td> 
         </tr>
        %end
    </table>
<p><input value="proof answer" type="submit"></p>
</form>

1 Ответ

0 голосов
/ 27 июня 2019

Добро пожаловать в переполнение стека!

Для чего бы то ни было, я могу исправить возникшую проблему, о которой вы спрашивали:

Проблема в цикле for, потому что он просто записывает последнийвведите ответ в файл.

, но, пожалуйста, обратите внимание, что ваш дизайн имеет недостатки в других отношениях (уже отмеченных @Blorgbeard и @ 9000 в комментариях).

Поскольку у вас естьмногозначный ввод формы, вы должны использовать getall, а не get, чтобы получить его значения.

values = request.forms.getall('value')  # returns a list

Ссылка: https://bottlepy.org/docs/dev/api.html#bottle.MultiDict.getall

...