2014-09-04 203 views
3

我試圖從我的模型使用加載圖像。django:無法加載圖像

形式領域

image_id = forms.CharField(widget=forms.HiddenInput(), required=False) 
image = forms.FileField(label = 'Select a Profile Image') 

實用

def get_user(self): 
    users = User.objects.all() 
    data ={'users':users} 
    return data 

意見

template_name= '/profile.html' 
def get(self,request, *args, **kwargs): 
    data = self.get_context_data(*args, **kwargs) 
    data.update({'user_detail':self.get_user(request.user)}) 
    return self.render_to_response(data) 

設置

MEDIA_URL = '/media/' 
MEDIA_ROOT = os.path.join(BASE_DIR, 'media').replace('\\', '/') 

模板

<center> 
<img src="{{user_detail.profile_image.image}}" height="150px" width="150px"> 
</center> 

我沒有在頁面上找到圖像。

+0

不要在你的服務器上載? – jedema 2014-09-04 12:10:29

+0

圖像保存在數據庫中,但在頁面上不加載,在瀏覽器內含器中顯示圖像的完整路徑,但不加載頁面。 – 2014-09-04 12:14:47

+0

你的其他靜態文件是否被下載? – jedema 2014-09-04 12:18:12

回答

0

兩種媒體文件(那些由用戶上傳的)和靜態文件(圖片,CSS,JS使用你的網站)應該是像Apache,Nginx的網絡服務器服務器等

的Django使得沒有魔法在這裏,您有責任正確配置您的Web服務器來提供這些文件。

例如,假設你有這樣的配置Django的:

STATIC_URL = '/static' 
STATIC_ROOT = '/var/www/mywebsite/static' 

MEDIA_URL = '/media' 
MEDIA_ROOT = '/var/www/mywebsite/media' 

你應該配置的Web服務器,以從由* _url變量識別的網址,這些* _ROOT目錄提供文件服務。在Apache中您可以使用兩個指令,像這樣的:

Alias /media /var/www/mywebsite/media 
Alias /static /var/www/mywebsite/static 

沒有一個Web服務器做媒體和靜態文件的工作,沒有機會瀏覽器訪問這些文件。

另外,如果要上傳的文件是圖片,我建議使用ImageField而不是FileField。

然後在模板你可以寫這樣的事情有完整的URL到圖像:

<img src="{{user_detail.profile_image.image.url}}" height="150px" width="150px">