2015-05-13 56 views
1

我創建的用戶類作爲這樣:爲什麼Flask應用程序中的圖像無法正確顯示?

class User(UserMixin, db.Model): 
     ### 
     avatar = db.Column(db.String(64), default='app/static/upload/default.jpeg') 

和用戶上載了形象如下(UPLOAD_DIR是應用程序/靜態/上傳):

###  
img_name = secure_filename(img.filename) 
     img_path = os.path.join(current_app.config['UPLOAD_DIR'], \ 
           img_name) 
     img.save(img_path) 
     current_user.avatar = os.path.join(
       current_app.config['UPLOAD_DIR'], 
       form.avatar.data.filename) 
     db.session.add(current_user) 
     flash('Upload completed.') 

然後我檢查了「上傳」目錄並證實img在那裏;我得到這個殼:

>>> z.avatar 
u'C:\\Users\Administrator\\Desktop\\weiboLITE\\app/static/uploads\\162421.jpg' 

現在我跑了服務器,發現img無法以某種方式顯示。我的模板是這樣的:

<div class="thumbnail"> 
    <img src="{{ user.avatar }}" alt="Avatar not found."> 
</div> 

所以我想知道應該在Jinja2模板中使用哪種格式...?或者我錯了嗎?請提供建議。

回答

2

你能提供一些額外的信息嗎?什麼是你用來渲染jinja2模板的路線的代碼?

此外,它看起來好像你還沒有提交到數據庫中的新路徑---新的頭像路徑添加到用戶對象後,你應該調用db.session.commit(),以確保新數據正確保存:

current_user.avatar = os.path.join(
       current_app.config['UPLOAD_DIR'], 
       form.avatar.data.filename) 
     db.session.add(current_user) 
     db.session.commit() # Try adding this line 
     flash('Upload completed.') 

這個問題很重要,例如,如果你正在向jinja2模板發送一個新的用戶對象。儘管在交互式shell中使用單個用戶對象時,路徑似乎可以正確保存,但在路由中執行新的User.query並將查詢對象作爲上下文發送到模板時,該路徑將不正確render_template()

最後,您應該使用url_for()調用圖像位置。檢查這個其他post指導。

祝你好運 - 我希望這有助於!

相關問題