flask-wtfで、value属性を使いたい

実現したいこと

flaskでwtf-formを用いて、フォームを作成しています。
現在、ユーザー情報の更新を行うルーティングを作成しています。ユーザー情報の更新を行うページで、jinjaテンプレートを用いてhtmlのinputタグにレンダリングされる部分にvalue属性を付与したいと考えています。以下、ダラダラと質問内容の詳細を書いていますが、結論としてはwtf-formでvalue属性を使う方法を教えていただきたいです。よろしくお願いします。

前提

flask-wtfを使わない書き方であれば、目的の表示を行うことができます。以下に、htmlタグで直接書いたパターン(成功しているパターン)とflask-wtfで書いたパターン(失敗しているパターン)を示します。

[ファイル構成]
(該当ファイルのみ、成功しているパターンと失敗しているパターンのどちらもファイル構造は同じです。)

C:. │ app.py │ └─templates  admin-userupdate.html

成功しているパターン

python

1###該当する部分のコードのみ載せています。###2 3#フォームクラス4class RegisterForm(FlaskForm):5 username = StringField('名前')6 email = EmailField('メールアドレス')7 password = PasswordField('パスワード')8 calender = StringField('カレンダーのタグ')9 room = URLField('ミーティングのリンク')10 submit = SubmitField('登録')11 12#ユーザーテーブル13class User(UserMixin, db.Model):14 __tablename__ = 'User'15 id = db.Column(db.Integer, primary_key=True)16 username = db.Column(db.String(100), nullable=False)17 email = db.Column(db.String(100), nullable=False, unique=True)18 password = db.Column(db.String(100), nullable=False)19 calender = db.Column(db.String(1000), nullable=False)20 room = db.Column(db.String(1000), nullable=False)21 def __init__(self, username, email, password, calender, room):22 self.username = username 23 self.email = email 24 self.password = password 25 self.calender = calender 26 self.room = room 27 28with app.app_context():29 db.create_all()30 31#該当のルーティングのみ載せています。32@app.route('/<int:id>/update', methods=['GET', 'POST'])33def adminuserupdate(id):34 if 'login' in session:35 #特定のid番号の情報を取得36 user = User.query.get(id)37 if request.method == 'POST':38 #上書き39 user.username = request.form.get('username')40 user.email = request.form.get('email')41 user.calender = request.form.get('calender')42 user.room = request.form.get('room')43 db.session.commit()44 return redirect('/admin')45 else:46 return render_template('admin-userupdate.html', user=user)

html

1#該当箇所のみ載せています。 2<h1>編集画面</h1>3<form method="POST">4 <label for="usrename">ユーザー名</label>5 <input type="text" name="username" value={{ user.username }}>6 <label for="email">Email</label>7 <input type="email" name="email" value={{ user.email }}>8 <label for="calender">カレンダーのタグ</label>9 <input type="text" name="calender" value={{ user.calender }}>10 <label for="room">ルームのURL</label>11 <input type="url" name="room" value={{ user.room }}>12 <input type="submit" value="更新">13</form>

失敗しているパターン

python

1###該当する部分のコードのみ載せています。###2 3#フォームクラス4class RegisterForm(FlaskForm):5 username = StringField('名前')6 email = EmailField('メールアドレス')7 password = PasswordField('パスワード')8 calender = StringField('カレンダーのタグ')9 room = URLField('ミーティングのリンク')10 submit = SubmitField('登録')11 12#ユーザーテーブル13class User(UserMixin, db.Model):14 __tablename__ = 'User'15 id = db.Column(db.Integer, primary_key=True)16 username = db.Column(db.String(100), nullable=False)17 email = db.Column(db.String(100), nullable=False, unique=True)18 password = db.Column(db.String(100), nullable=False)19 calender = db.Column(db.String(1000), nullable=False)20 room = db.Column(db.String(1000), nullable=False)21 def __init__(self, username, email, password, calender, room):22 self.username = username 23 self.email = email 24 self.password = password 25 self.calender = calender 26 self.room = room 27 28with app.app_context():29 db.create_all()30 31#該当のルーティングのみ載せています。32@app.route('/<int:id>/update', methods=['GET', 'POST'])33def adminuserupdate(id):34 if 'login' in session:35 #特定のid番号の情報を取得36 user = User.query.get(id)37 form = RegisterForm()38 # if request.method == 'POST':39 if form.validate_on_submit():40 #上書き41 user.username = form.username.data 42 user.email = form.email.data 43 user.calender = form.calender.data 44 user.room = form.room.data 45 db.session.commit()46 return redirect('/admin')47 else:48 return render_template('admin-userupdate.html', form=form)

html

1#当該箇所のみ載せています。 2#私の書き方は、明らかに間違っているので正しい書き方を教えてください。 3#よろしくお願いします。 4<h1>編集画面</h1>5<form method="POST">6 <!-- <label for="usrename">ユーザー名</label> 7 <input type="text" name="username" value={{ user.username }}> 8 <label for="email">Email</label> 9 <input type="email" name="email" value={{ user.email }}> 10 <label for="calender">カレンダーのタグ</label> 11 <input type="text" name="calender" value={{ user.calender }}> 12 <label for="room">ルームのURL</label> 13 <input type="url" name="room" value={{ user.room }}> 14 <input type="submit" value="更新"> -->15 {{ form.csrf_token }} 16 {{ form.username(value={{ user.username }}) }} 17 <br>18 {{ form.email(value={{ user.email }}) }} 19 <br>20 {{ form.calender(value={{ user.calender }}) }} 21 <br>22 {{ form.room(value={{ user.room }}) }} 23 {{ form.submit }} 24</form>

コメントを投稿

0 コメント