質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

621閲覧

Flask 入力チェックのエラーマクロ読み込みエラーについて

退会済みユーザー

退会済みユーザー

総合スコア0

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2023/04/08 02:29

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

のようにBitlifeという引数を与えているからです。

投稿2023/04/11 07:17

Nanisa

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

エラーにあるとおり、マクロ render_field には、 位置パラメータ field しか定義されていないのに、呼び出し時に

html

1render_field(form.username, placeholder="ユーザー名")

のようにplaceholderという引数を与えているからです。

投稿2023/04/08 09:13

TakaiY

総合スコア12783

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問