2016-04-14 34 views
0

Ben yeni bir Flask öğrenme öğrencisiyim ve küçük uygulamamda verileri nasıl ileriye aktarabileceğimi anlamaya çalışıyorum. Aşağıdaki kod, geçerli bir hareket yürütüldüğünde "Hata kodu: İşlenmemiş Özel Durum" hatasını döndürür ve neyin yanlış olduğunu gerçekten anlamıyorum. (diğer iki seçenek de çalışır.)Flask: Jinja html şablonunda sözlüğü gösteremiyor

py kodu: theBoard = [{1: '', 2: '', 3: '', 4: '', 5: '', 6: '' , 7 ' ' 8', 9':' '}]

@app.route('/test', methods=["GET", "POST"]) 
def test(): 
    if request.method == 'POST': 
     x = request.form['move'] 
     move = int(x) 
     valid_moves = [1,2,3,4,5,6,7,8,9] 
     if move not in valid_moves: 
      return 'you did not specify a valid move, please try again!' 
     elif theBoard[move] != ' ': 
      return 'you can not play that space, it is taken' 
     else: 
      theBoard[move] = 'X' 
      return render_template("test2.html", theBoard=theBoard) 

    return render_template("test.html") 

hTML kodu:

<table> 
{% for key, value in theBoard.iteritems() %} 
<h1>Key: {{key}}</h1> 
<h2>Value: {{value}}</h2> 
{% endfor %} 
</table> 
+0

Girinti ile bir şeyler ters gitti. ilk kod: theBoard = [{1: '', 2: '', 3: '', 4: '', 5: '', 6: '', 7: '', 8: '', 9: ''}] .py dosyasının bir parçasıdır –

+0

Hatalogda aşağıdakileri buldum: File "/home/majaokholm/mysite/flask_app.py", satır 19, test elif theBoard [move]! = '': IndexError: liste endeksi aralık dışı –

+0

tüm oradaydı, şimdi sadece –

cevap

0

yatta, bir listesidir testi() ve aynı zamanda html şablonunda bir dict olarak davranırsın. İlk satırı aşağıdaki kodla değiştirin ve çalışıp çalışmadığını görün.

theBoard = {1:' ', 2:' ', 3:' ', 4: ' ', 5:' ', 6: ' ', 7:' ', 8:' ', 9:' '} 
+0

Nope maalesef işe yaramadı. Hata günlüğünde aşağıdakileri buldum: Dosya "/home/majaokholm/mysite/flask_app.py", satır 19, test elif theBoard [move]! = '': IndexError: –

+0

aralığındaki liste endeksi Sorunuz (yorumları uygunsuz bir şekilde yerleştirdiğiniz için özür dileriz), lütfen TheBoard'u bir dict ile değiştirmeyi deneyin ve daha sonra bulgunuzu bildirin. –

+0

Önceki kodunuzu çalıştırdığınızda günlük öğesi oluşturulabilir –