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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

解決済

1回答

3659閲覧

Python3 どこで NameError: が発生しているかわかりません。

gaijin

総合スコア30

Python 3.x

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

0グッド

0クリップ

投稿2018/11/06 02:34

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

template 関数の呼び出し時に名前付き引数が text になっていますが、これが input_text になるべきだと思います。

template('pybot_template', input_text=input_text)

input_text という変数がPythonコードに存在しているからと言って、よしなにテンプレート埋め込みをしてくれるわけではありません。
また、 output_text も指定されていないのでこの修正だけではうまくいかないはずです。

追記

まず自分の書いたコードの意味を再確認しましょう。
@route で示された内容を見る限り GET /hello リクエストを受けたときに実行されるのは hello() の方です。
また、同じテンプレートを利用しているので、同じキーワード引数が両方に必要になるはずです。

diff

1 @route('/hello') 2 def hello(): 3- return template('pybot_template', text='') 4+ return template('pybot_template', input_text='', output_text='') 5 6 7 @route('/hello', method='post') 8 def do_hello(): 9 input_text = request.forms.input_text 10- return template('pybot_template', text=input_text) 11+ return template('pybot_template', input_text=input_text, output_text='')

もし GET とは何かわからないのであればまずHTTPの勉強をするべきですし、
@route などがわからないのであれば教本をちゃんと見直してみるか、bottleライブラリのドキュメントを読みましょう。

投稿2018/11/06 04:26

編集2018/11/06 10:02
mather

総合スコア6753

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

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

gaijin

2018/11/06 05:14

迅速なご回答ありがとうございます! 今入力してやってみたところおっしゃっていただいたようにうまくいきませんでした。 教本にはこの通りに乗っていて、output_textの指定も特にないようなのですが、差し支えなければどのようにすればいいか教えていただきたく思います。。
mather

2018/11/06 05:38

教本のとおり、というのであれば教本が中途半端なのか読み飛ばしてしまっているかでしょう…。 ひとまずは output_text="" などを追加して仮のデータを入れてみてはいかがでしょうか。
gaijin

2018/11/06 09:30

ご教授いただいたようにしているのですが、やはりエラーが出ます。 どこかでミスをしているのでしょうが、おそらくこちらの教本には入力した通り記載されているように思います。 output_text=""はどこに配置すれば正解なのでしょうか?
mather

2018/11/06 09:35 編集

gaijinさんはどこに配置したんですか?
gaijin

2018/11/06 09:35

return template('pybot_template', input_text=input_text, output_text="") このように配置しております。 どうでしょうか?
mather

2018/11/06 09:41

それ自体は合っていると思います。どんなエラーが出ますか?
mather

2018/11/06 09:42

予想なんですが、def do_hello() のみ変更を加えて、GET /hello のリクエストを送信していませんか?
gaijin

2018/11/06 09:51

エラーとしては上記と同じエラーが出ます。 すいません自分の知識不足でまだそこまで把握できていなく。。 本当にご迷惑をおかけしてしまい申し訳ございません。。
mather

2018/11/06 09:53

質問内容に現在のコードの状態を追記してください。
gaijin

2018/11/06 09: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)
mather

2018/11/06 10:04

コメントに書くとコードブロックが使えないので「質問内容に追記してほしい」と書いたのですが伝わらなかったですね…。
gaijin

2018/11/06 10:14

本当に申し訳ございません。はい、必ず教えていただいたこと全て勉強いたします。 今回は最初から最後まで丁寧に全て教えていただきありがとうございました。 教えていただいた通りに実行し1日悩んでいたことが解決致しました。 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問