Flaskでユーザー登録処理を実装中です。
ユーザー登録画面(register.html)で入力チェックを行いエラーを表示させるためエラーマクロを作成しましたが、
どうしても、app.pyを実行すると、register.htmlの{{ render_field(form.username, placeholder="ユーザー名") }}
で
エラーとなってしまいます。
エラー内容
TypeError: macro 'render_field' takes no keyword argument 'placeholder'
スペル等も確認していますが、間違いは見つからず、解決ができない状況です。
どなたかご教示の程、よろしくお願いします。
_formhelpers.html
html
1<!-- エラーマクロ--> 2{% macro render_field(field) %} 3{{ field(**Kwargs)|safe }} 4<!-- エラーメッセージ表示 --> 5{% if field.errors %} 6 <br> 7 {% for error in field.errors %} 8 {{ error }} 9 {% endfor %} 10{% endif %} 11{% endmacro %}
base.html
html
1<!-- エラーマクロ読み込み--> 2 {% from "_formhelpers.html" import render_field %} 3 4 <div class="container" style="padding-top: 4rem; padding-bottom: 4rem;"> 5 {% for message in get_flashed_messages() %} 6 <div class="alert alert-warning alert-dismissible fade show" role="alert"> 7 {{message}} 8 <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button> 9 </div> 10 {% endfor %} 11 12 {% block content %} 13 14 {% endblock %}
register.html
html
1 <form method="POST"> 2 {{ form.hidden_tag() }} 3 <div class="mb-3"> 4 {{ render_field(form.username, placeholder="ユーザー名") }} 5 </div> 6 <div class="mb-3"> 7 {{ render_field(form.email, placeholder="メールアドレス") }} 8 </div> 9 <div class="mb-3"> 10 {{ render_field(form.password, placeholder="パスワード") }} 11 </div> 12 <div class="mb-3"> 13 {{ render_field(form.pass_confirm, placeholder="パスワード(確認)") }} 14 </div> 15 {{ form.submit() }} 16 </form>
app.py
python
1from flask import Flask, render_template, url_for, redirect, session, flash 2from flask_wtf import FlaskForm 3from wtforms import StringField, PasswordField, SubmitField 4from wtforms.validators import DataRequired, Email, EqualTo 5 6app = Flask(__name__) 7 8app.config['SECRET_KEY'] = 'mysercretkey' 9 10 11class RegistrationForm(FlaskForm): 12 email = StringField('メールアドレス', validators=[DataRequired(), Email(message='正しいメールアドレスを入力してください')]) 13 username = StringField('ユーザー名', validators=[DataRequired()]) 14 password = PasswordField('パスワード', validators=[DataRequired(), EqualTo('pass_confirm', message='パスワードが一致していません')]) 15 pass_confirm = PasswordField('パスワード(確認)', validators=[DataRequired()]) 16 submit = SubmitField('登録') 17 18 19@app.route('/register', methods=['GET', 'POST']) 20def register(): 21 form = RegistrationForm() 22 if form.validate_on_submit(): 23 session['email'] = form.email.data 24 session['username'] = form.username.data 25 session['password'] = form.password.data 26 flash('ユーザーが登録されました') 27 return redirect(url_for('user_maintenance')) 28 return render_template('register.html', form=form) 29 30@app.route('/user_maintenance') 31def user_maintenance(): 32 return render_template('user_maintenance.html') 33 34if __name__ == '__main__': 35 app.run(debug=True) 36 37

回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。