2017-03-16 2 views
0

Flaskでファイルをアップロードしようとすると、エラー'NoneType' object has no attribute 'filename'が表示されます。Flask WTFアップロードファイルエラー

私はdocumentationに従っていますが、それはうまく動作しません。ここで

class SubmitLocations(Form): 
    title = TextField("Name Of Location (What do the locals call it)") 
    description = TextField("Please describe the location") 
    upload = FileField("Please select an image to upload") 


@app.route('/add_spot/', methods=["GET","POST"]) 
@login_required 
def add_spot(): 
    try: 
     form = SubmitLocations(request.form) 

     if request.method == "POST": 
      title = form.title.data 
      description = form.description.data 
      f = form.upload.data 
      filename = secure_filename(f.filename) 
      f.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 

が私のHTMLフォーム

<form method=post enctype="multipart/form-data" action="/add_spot/"> 
    <dl> 
     {{render_field(form.title)}} 
     {{render_field(form.description)}} 
     {{render_field(form.upload)}} 
    </dl> 
    <p><input type=submit value=Submit></p> 
    </form> 

あるページがうまくレンダリングし、私がアップロードするファイルを選択することができますが、私は、私は私が'NoneType' object has no attribute 'filename'上記のエラーを取得する送信したとき、私は場合は思ったんだけど誰かが私のエラーに私を向けることができますか?多分私はクリティカルな部分を残したでしょうか?

ファイルのアップロード部分を削除すると、エラーなしでこのフォームを送信できます。

答えて

1

ファイルなしでフォームを送信したようです。最初にフォームを検証する必要があります。ファイルを持っている場合は、FileRequiredをバリデーターに追加してください。

from flask_wtf.file import FileRequired 


class SubmitLocations(Form): 
    # ... 
    upload = FileField("Please select an image to upload", validators=[FileRequired()]) 


def add_spot(): 
    form = SubmitLocations(request.form) 

    # changed this line 
    if form.validate_on_submit(): 
     title = form.title.data 
     description = form.description.data 
     f = form.upload.data 
     filename = secure_filename(f.filename) 
     f.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 
+0

あなたは正しいです。私はtry文に 'validator'を追加するだけでした。あなたのお手伝いをしていただきありがとうございます。 – BrettJ

関連する問題