2014-09-04 125 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">