django:无法加载图片

时间:2014-09-04 12:04:26

标签: django python-2.7 django-templates

我正在尝试使用。

从我的模型中加载图像

表单字段

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>

我没有在页面上获取图像。

1 个答案:

答案 0 :(得分:0)

媒体文件(用户上传的文件)和静态文件(网站使用的图片,css,js)都应该由Apache,Nginx等Web服务器提供服务。

Django在这里没有任何魔力,你有责任正确配置你的网络服务器来提供这些文件。

例如,假设你已经像这样配置了Django:

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

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

您应该已经配置了一个Web服务器来提供* _URL变量标识的URL中那些* _ROOT目录中的文件。在Apache中,您可以使用以下两个指令:

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

如果没有网络服务器为媒体和静态文件工作,浏览器就无法访问这些文件。

如果要上传的文件是图片,我建议使用ImageField代替FileField。

然后在模板中你可以写这样的东西来获得图像的完整网址:

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