2017-06-25 2 views
-2

Flaskの学習を始め、チュートリアルを参照して小さなテストコードを実行しました。ここFlaskで出力を表示しているときに内部サーバーエラー500を取得しています

コードは次のとおり

Hello.py

from flask import Flask, render_template, request 
app = Flask(__name__) 

@app.route('/') 
def student(): 
    return render_template('student.html') 

@app.route('/result',methods = ['POST', 'GET']) 
def result(): 
    if request.method == 'POST': 
     result = request.form 
     return render_template("result.html",result = result) 

if __name__ == '__main__': 
    app.run() 

student.html

<html> 
    <body> 

     <form action = "http://localhost:5000/result" method = "POST"> 
     <p>Name <input type = "text" name = "Name" /></p> 
     <p>Physics <input type = "text" name = "Physics" /></p> 
     <p>Chemistry <input type = "text" name = "chemistry" /></p> 
     <p>Maths <input type ="text" name = "Mathematics" /></p> 
     <p><input type = "submit" value = "submit" /></p> 
     </form> 

    </body> 
</html> 

result.html

<!doctype html> 
<html> 
    <body> 

     <table border = 1> 
     {% for key, value in result.iteritems() %} 

      <tr> 
       <th> {{ key }} </th> 
       <td> {{ value }} </td> 
      </tr> 

     {% endfor %} 
     </table> 

    </body> 
</html> 

student.htmlresult.htmltemplatesフォルダに保存しました。 Hello.pyを実行すると、student.htmlが実行され、フィールドに値を入力できるフォームが表示されます。

内部サーバーエラー サーバが内部エラーが発生したため、リクエストを完了できませんでした:result.htmlページが表示されます提出ではなく、それは次のエラーを与えるクリックします。サーバーに過負荷がかかっているか、アプリケーションにエラーがあります。

トレースバック:

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) 
127.0.0.1 - - [25/Jun/2017 20:48:15] "GET/HTTP/1.1" 200 - 
[2017-06-25 20:48:24,634] ERROR in app: Exception on /result [POST] 
Traceback (most recent call last): 
    File "C:\Users\Kshitiz\Anaconda3\lib\site-packages\flask\app.py", line 1982, in wsgi_app 
    response = self.full_dispatch_request() 
    File "C:\Users\Kshitiz\Anaconda3\lib\site-packages\flask\app.py", line 1614, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
    File "C:\Users\Kshitiz\Anaconda3\lib\site-packages\flask\app.py", line 1517, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
    File "C:\Users\Kshitiz\Anaconda3\lib\site-packages\flask\_compat.py", line 33, in reraise 
    raise value 
    File "C:\Users\Kshitiz\Anaconda3\lib\site-packages\flask\app.py", line 1612, in full_dispatch_request 
    rv = self.dispatch_request() 
    File "C:\Users\Kshitiz\Anaconda3\lib\site-packages\flask\app.py", line 1598, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
    File "<ipython-input-1-0b3c292b941b>", line 12, in result 
    return render_template("result.html",result = result) 
    File "C:\Users\Kshitiz\Anaconda3\lib\site-packages\flask\templating.py", line 134, in render_template 
    context, ctx.app) 
    File "C:\Users\Kshitiz\Anaconda3\lib\site-packages\flask\templating.py", line 116, in _render 
    rv = template.render(context) 
    File "C:\Users\Kshitiz\Anaconda3\lib\site-packages\jinja2\asyncsupport.py", line 76, in render 
    return original_render(self, *args, **kwargs) 
    File "C:\Users\Kshitiz\Anaconda3\lib\site-packages\jinja2\environment.py", line 1008, in render 
    return self.environment.handle_exception(exc_info, True) 
    File "C:\Users\Kshitiz\Anaconda3\lib\site-packages\jinja2\environment.py", line 780, in handle_exception 
    reraise(exc_type, exc_value, tb) 
    File "C:\Users\Kshitiz\Anaconda3\lib\site-packages\jinja2\_compat.py", line 37, in reraise 
    raise value.with_traceback(tb) 
    File "C:\Users\Kshitiz\Desktop\doc2vec\templates\result.html", line 6, in top-level template code 
    {% for key, value in result.iteritems() %} 
jinja2.exceptions.UndefinedError: 'werkzeug.datastructures.ImmutableMultiDict object' has no attribute 'iteritems' 
127.0.0.1 - - [25/Jun/2017 20:48:24] "POST /result HTTP/1.1" 500 - 

あなたは私のコードが間違っているものを教えていただけますか?

+0

トレースバックなしではありません。あなたが削除した投稿にはあなたが含まれていましたが、そこには 'TemplateNotFound'例外がありました。同じ例外がまだありますか?テンプレートファイルを正しい場所に移動して修正します。 –

+0

私はその愚かさをどれほど愚かにしたのか気づきました。 result.htmlとstudent.htmlの両方をテンプレートフォルダに移動しましたが、例外はありませんでした。代わりにこれ。あるスクリプトは動作し、他のスクリプトは動作しません。 – Kshitiz

+0

しかし、まだトレースバックを見る必要があります。 –

答えて

0

request.formオブジェクトをテンプレートに渡しました。トレースバックはあなたを伝えると、そのオブジェクトにはiteritems()メソッドを持っていない:

'werkzeug.datastructures.ImmutableMultiDict object' has no attribute 'iteritems' 

辞書にiteritems()方法は、Python 2固有のものです。 Python 3では、ちょうどitems()を使用してください:

{% for key, value in result.items() %} 
関連する問題