Python3 どこで NameError: が発生しているかわかりません。
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 1,813
pythonを独学にて学んでいる初心者です。
htmlをブラウザにて表示させたいのですがエラーが出てできなくなりました。
NameError: name 'input_text' is not definedということだったので
スペルミスのチェック、や存在していない変数を呼び込もうとしているのかと見直し調べているのですが自分では発見できません。
もし何かname以外での問題であればご指摘いただきたく思います。
どうぞご教授いただければと思います。
下記が自分が入力したものです、
<html>
<body>
<h1>pybot webアプリケーション</h1>
<form method="post" action="/hello">
メッセージを入力してください: <input type="text" name="input_text">
<input type="submit" value="送信">
</form>
<ul>
<li>入力メッセージ: {{input_text}}</li>
<li>pybotからの応答メッセージ: {{output_text}}</li>
</ul>
</body>
</html>
from bottle import route, run, template, request
@route('/hello')
def hello():
return template('pybot_template', text='')
@route('/hello', method='post')
def do_hello():
input_text = request.forms.input_text
return template('pybot_template', text=input_text)
run(host='localhost', port=8080, debug=True)
下記のようにエラーが出ます(長文のため割愛しております)
Bottle v0.12.13 server starting up (using WSGIRefServer())...
Listening on http://localhost:8080/
Hit Ctrl-C to quit.
File "/Users/hayato/Desktop/yasashiipython/pybotweb/env/lib/python3.7/site-packages/bottle.py", line 1740, in wrapper
rv = callback(*a, **ka)
File "pybotweb.py", line 6, in hello
return template('pybot_template', text='')
pybotweb/env/lib/python3.7/site-packages/bottle.py", line 3396, in execute
eval(self.co, env)
File "/Users/hayato/Desktop/yasashiipython/pybotweb/pybot_template.tpl", line 9, in <module>
<li>入力メッセージ: {{input_text}}</li>
NameError: name 'input_text' is not defined
127.0.0.1 - - [06/Nov/2018 11:12:04] "GET /hello HTTP/1.1" 500 2113
127.0.0.1 - - [06/Nov/2018 11:12:04] "GET /favicon.ico HTTP/1.1" 404 742
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
template
関数の呼び出し時に名前付き引数が text
になっていますが、これが input_text
になるべきだと思います。
template('pybot_template', input_text=input_text)
input_text
という変数がPythonコードに存在しているからと言って、よしなにテンプレート埋め込みをしてくれるわけではありません。
また、 output_text
も指定されていないのでこの修正だけではうまくいかないはずです。
追記
まず自分の書いたコードの意味を再確認しましょう。
@route
で示された内容を見る限り GET /hello
リクエストを受けたときに実行されるのは hello()
の方です。
また、同じテンプレートを利用しているので、同じキーワード引数が両方に必要になるはずです。
@route('/hello')
def hello():
- return template('pybot_template', text='')
+ return template('pybot_template', input_text='', output_text='')
@route('/hello', method='post')
def do_hello():
input_text = request.forms.input_text
- return template('pybot_template', text=input_text)
+ return template('pybot_template', input_text=input_text, output_text='')
もし GET とは何かわからないのであればまずHTTPの勉強をするべきですし、
@route
などがわからないのであれば教本をちゃんと見直してみるか、bottleライブラリのドキュメントを読みましょう。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.33%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2018/11/06 14:14
2018/11/06 14:38
ひとまずは output_text="" などを追加して仮のデータを入れてみてはいかがでしょうか。
2018/11/06 18:30
どこかでミスをしているのでしょうが、おそらくこちらの教本には入力した通り記載されているように思います。
output_text=""はどこに配置すれば正解なのでしょうか?
2018/11/06 18:32 編集
2018/11/06 18:35
このように配置しております。
どうでしょうか?
2018/11/06 18:41
2018/11/06 18:42
2018/11/06 18:51
すいません自分の知識不足でまだそこまで把握できていなく。。
本当にご迷惑をおかけしてしまい申し訳ございません。。
2018/11/06 18:53
2018/11/06 18:57
from bottle import route, run, template, request
@route('/hello')
def hello():
return template('pybot_template', text='')
@route('/hello', method='post')
def do_hello():
input_text = request.forms.input_text
return template('pybot_template', input_text=input_text, output_text="")
run(host='localhost', port=8080, debug=True)
2018/11/06 19:04
2018/11/06 19:14
今回は最初から最後まで丁寧に全て教えていただきありがとうございました。
教えていただいた通りに実行し1日悩んでいたことが解決致しました。
本当にありがとうございました!