关于电影编辑章节中的代码bug:AttributeError: 'str' object has no attribute 'filename'
来源:7-9 .电影管理-列表-删除-编辑2
那辰4403872
2018-03-04
报错如下图所示:
确定forms.py表单的url和logo选择了FileField字段:
views.py 视图函数也导入了
from werkzeug.utils import secure_filename # 如下图所示
下图展示具体代码:
# 电影编辑 @admin.route('/movie/edit/<int:id>', methods=["GET", "POST"]) @admin_login_req def movie_edit(id=None): form = MovieForm() form.url.validators = [] # 因为可以不做更改,所以不需要校验 form.logo.validators = [] movie = Movie.query.get_or_404(id) if request.method == "GET": form.info.data = movie.info form.star.data = movie.star form.tag_id.data = movie.tag_id if form.validate_on_submit(): data = form.data movie_count = Movie.query.filter_by(title=data["title"]).count() if movie_count == 1 and movie.title != data['title']: flash("片名已经存在!", "error") return redirect(url_for("admin.movie_edit", id=id)) if not os.path.exists(app.config['UP_DIR']): # 存放目录不存在则创建 os.makedirs(app.config['UP_DIR']) os.chmod(app.config['UP_DIR'], "rw") if form.url.data.filename != '': old_url = movie.url file_url = secure_filename(form.url.data.filename) # 获取并转化为安全的电影文件名 movie.url = change_filename(file_url) # 调用函数生成新的文件名 form.url.data.save(app.config['UP_DIR'] + movie.url) # 保存上传的数据 if os.path.exists(app.config['UP_DIR'] + old_url): # 删除旧文件 os.remove(app.config['UP_DIR'] + old_url) if form.logo.data.filename != '': old_logo = movie.logo file_logo = secure_filename(form.logo.data.filename) movie.logo = change_filename(file_logo) form.logo.data.save(app.config['UP_DIR'] + movie.logo) if os.path.exists(app.config['UP_DIR'] + old_logo): os.remove(app.config['UP_DIR'] + old_logo) movie.title = data["title"] movie.info = data["info"] movie.star = int(data["star"]) movie.tag_id = int(data["tag_id"]) movie.area = data["area"] movie.release_time = data["release_time"] movie.length = data["length"] db.session.add(movie) db.session.commit() flash("添加电影成功", "successfully") return redirect(url_for("admin.movie_list", id=movie.id)) return render_template("admin/movie_edit.html", form=form, movie=movie)
movie_edit.html 页面的form表单:的确填写了 enctype="multipart/form-data"
<form role="form" method="post" enctype="multipart/form-data"> {{ form.csrf_token }} ...
望老师百忙之中能够抽出时间为学生解答,O(∩_∩)O谢谢
# 这个bug已经把我弄疯了
写回答
6回答
-
慕函数5852696
2018-07-21
我也遇到这个问题了我的解决办法是:
判断filename对象是否存在,如果不存在就跳过
if hasattr(form.url.data,'filename'):
112018-12-02 -
深圳_电信_王觉
2018-05-10
其实,你忘了在 form表单中添加了,<form action="" enctype="multipart/form-data"></form>
添加这个就行了,enctype="multipart/form-data" ,然后再上传看看
00 -
慕娘4228142
2018-05-02
有人能够回答吗
00 -
慕娘4228142
2018-05-02
同问啊,我在添加电影就遇到这个问题了。
00 -
qq_米兰城的问题青年_0
2018-04-28
同遇到这个问题!
00 -
那辰4403872
提问者
2018-03-04
编辑电影的时候,必须同时把原来的url和logo再上传一遍就不会报错,少上传一个logo或url视频,就会找不到filename
00
相似问题