Flask+HTML+javascriptで簡単な書籍管理システムを作成しています。
保存する
ボタンを押した際にNone
と返ってきます。
保存する
を押した際に
<input type="number" class="counter{{loop.index}}" data-max="500" data-min="0" name="{{loop.index}}">
のvalue
値とname="{{loop.index}}"
の両方をPOSTする方法を教えていただけると幸いです。
ソースコード
index.html
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous"> <title>{{title}}</title> </head> <body> <h1>{{title}}</h1> <table class="table table-bordered table-striped"> <thead> <tr> <th scope="col">#</th> <th scope="col">書籍名</th> <th scope="col">競合人数</th> </tr> </thead> <tbody> {% for item in data %} <tr> <th>{{loop.index}}</th> <th scope="row">{{item[0]}}</th> <td> <form action="/" method="POST"> <div class="spinner_area"> <input type="number" class="counter{{loop.index}}" data-max="500" data-min="0" name="{{loop.index}}"> <input type="button" value="+" class="btnspinner" data-cal="1" data-target=".counter{{loop.index}}"> <input type="button" value="-" class="btnspinner" data-cal="-1" data-target=".counter{{loop.index}}"> </div> </form> </td> </tr> {% endfor %} </tbody> </table> <input class="btn btn-outline-success" type="submit" value="保存する"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js?ver=1.12.4"></script> <script> $(function(){ var arySpinnerCtrl = []; var spin_speed = 20; //変動スピード //長押し押下時 $('.btnspinner').on('touchstart mousedown click', function(e){ if(arySpinnerCtrl['interval']) return false; var target = $(this).data('target'); arySpinnerCtrl['target'] = target; arySpinnerCtrl['timestamp'] = e.timeStamp; arySpinnerCtrl['cal'] = Number($(this).data('cal')); //クリックは単一の処理に留める if(e.type == 'click'){ spinnerCal(); arySpinnerCtrl = []; return false; } //長押し時の処理 setTimeout(function(){ //インターバル未実行中 + 長押しのイベントタイプスタンプ一致時に計算処理 if(!arySpinnerCtrl['interval'] && arySpinnerCtrl['timestamp'] == e.timeStamp){ arySpinnerCtrl['interval'] = setInterval(spinnerCal, spin_speed); } }, 500); }); //長押し解除時 画面スクロールも解除に含む $(document).on('touchend mouseup scroll', function(e){ if(arySpinnerCtrl['interval']){ clearInterval(arySpinnerCtrl['interval']); arySpinnerCtrl = []; } }); //変動計算関数 function spinnerCal(){ var target = $(arySpinnerCtrl['target']); var num = Number(target.val()); num = num + arySpinnerCtrl['cal']; if(num > Number(target.data('max'))){ target.val(Number(target.data('max'))); }else if(Number(target.data('min')) > num){ target.val(Number(target.data('min'))); }else{ target.val(num); } } }); </script> </body> </html>
app.py
from flask import Flask, render_template, request, session, url_for, redirect, jsonify, g from flask.views import MethodView import sqlite3, pickle app = Flask(__name__) # get Database Object. def get_db(): db = sqlite3.connect('all_data.db') return db # close Database Object. def close_db(e=None): db = g.pop('db', None) if db is not None: db.close() def data_get(): book_data = [] db = get_db() cur = db.execute("select * from book_management_db") book_data = cur.fetchall() return book_data @app.route('/') def index(): book_data = data_get() return render_template('index.html', title='書籍管理システム', data=book_data) @app.route('/', methods=['POST']) def post(): label = request.form.get("label") print(label) #db = get_db() #db.execute(f"UPDATE book_management_db set people = {label.split(':')[1]} where book_name = {label.split(':')[0]}") #db.commit() book_data = data_get() return render_template("index.html", title=f"書籍管理システム+{label}", data=book_data) if __name__ == '__main__': app.run(debug=True)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/06 21:34 編集
退会済みユーザー
2021/12/06 22:19 編集