このように個数nに応じてinput欄を可変にして,そのinputに入力された値をpythonに渡してリストを作りたいです.フレームワークはflaskを使っています。
HTML内でforを使ってinput欄を可変にしているのですが,そのnameに変数iを加えたものを入れたいです.
(ex:element_i)
こうすることによってinputの呼び出し毎にnameやlabelを変更したいのですが方法はありますか?
できればPHPなどを使いたくはないのですが
html
1{% extends 'base.html' %} 2 3{% block body %} 4<h1 class="text-center">Least Squares</h1> 5<section class="calc_xy"> 6 <form action="/calc" method="POST"> 7 <div class="container d-flex text-center justify-content-center"> 8 <div class="calc_x"> 9 {% for i in range(element) %} 10 <label for="elements">xの{{ i + 1 }}番目の要素の値</label> 11 <p><input type="text" name="elements" class="text-center calcs"></p> 12 {% endfor %} 13 </div> 14 <div class="calc_y"> 15 {% for i in range(element) %} 16 <label for="elements">yの{{ i + 1 }}番目の要素の値</label> 17 <p><input type="text" name="elements" class="text-center calcs"></p> 18 {% endfor %} 19 </div> 20 </div> 21 <p class="text-center"><input type="submit" value="計算"></p> 22 </form> 23</section> 24{% endblock %}
python
1from flask import Flask, render_template, request, redirect, url_for 2from flask_sqlalchemy import SQLAlchemy 3 4 5app = Flask(__name__) 6app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///todo.db' 7db = SQLAlchemy(app) 8 9class Post(db.Model): 10 id = db.Column(db.Integer, primary_key=True) 11 element = db.Column(db.String(30), nullable=False) 12 13class F: 14 def __init__(self): 15 self.x = 0 16 def __call__(self): 17 self.x += 1 18 return self.x 19 20 21@app.route('/', methods=['GET', 'POST']) 22def index(): 23 if request.method =='GET': 24 posts = Post.element 25 return render_template('index.html', posts=posts) 26 27 else: 28 element = int(request.form.get('element')) 29 30 new_post = Post(element=element) 31 32 print(str(element)) 33 db.session.add(new_post) 34 db.session.commit() 35 36 return render_template('calc.html', element=element) 37 38@app.route('/calc', methods=['GET', 'POST']) 39def calc(): 40 if request.method == 'GET': 41 print('a') 42 return redirect('/calc') 43 44 else: 45 data =[] 46 f = F() 47 count = f() 48 print(count) 49 elements = request.form.get('elements') 50 51 print(elements) 52 result = elements#テスト 53 return render_template('result.html', result=result, count=count)
回答1件
あなたの回答
tips
プレビュー