2017-03-16 3 views
0

Ich bekomme den Fehler 'NoneType' object has no attribute 'filename' beim Versuch, eine Datei mit Flask hochladen.Flask WTF Upload-Datei Fehler

Ich folge dem documentation, aber ich kann es nicht ganz zum Laufen bringen.

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)) 

Hier ist mein HTML-Formular

<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> 

Die Seite ganz gut macht, und ich kann eine Datei, sondern laden wählen, wenn ich einreichen erhalte ich den Fehler, den ich oben erwähnt 'NoneType' object has no attribute 'filename' ich mich, wenn kann mich jemand auf meinen Fehler hinweisen? Vielleicht habe ich ein kritisches Stück ausgelassen?

Etwas zu beachten, wenn ich den Datei-Upload-Teil entfernen, kann ich dieses Formular ohne Fehler überhaupt übermitteln.

Antwort

1

Scheint, Sie haben das Formular ohne eine Datei gesendet. Sie müssen das Formular zuerst bestätigen. Wenn Sie auf die Datei angewiesen sind, fügen Sie FileRequired zu den Validatoren hinzu.

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

Sie hatten Recht. Ich musste dann nur "und Validatoren" zu meiner Aussage hinzufügen. Uploads funktionieren, danke für Ihre Hilfe. – BrettJ

Verwandte Themen