关于Django中访问通过ImageField上传的图片的问题

在后台通过ImageFIeld上传了图片到本地的upload文件夹里,前台指定正确的路径也不能读取相应的图片,

媒体文件设置如下:

# 媒体文件
PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname('__file__')))

MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media')

MEDIA_URL = '/media/'

静态文件设置:

STATIC_URL = '/static/'


STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

前台读取路径代码:

<img src="../media/{{ article.author.photo }}">

clipboard.png

相关models:

class BBS_user(models.Model):
    user = models.OneToOneField(User)
    signature = models.CharField(max_length=128, default='这家伙很懒,什么也没留下.')
    photo = models.ImageField(upload_to='upload_imgs/', default='upload_imgs/user-0.jpg')

upload目录位置:
图片描述
请问该如何解决?

阅读 11.3k
2 个回答

题主,你的图片不能显示出来,除了你的写法有问题以外,还有一个问题,就是你的urls文件中应该有相关的读取图片的url,否则,是不能读取成功的。

上面的前提是你在服务器端访问这个文件,如果你直接在浏览器中打开这个文件的话,应该是可以打开图片的,因为这两种方式用的协议是不一样的。至于在django中如何使用,上面的@tolerious 已经说出来了。

补充部分:

PS: 关于这个urls的设置问题,其实就是djangomediastaticfiles的使用了,主要内容的修改的话,我真的是建议题主先搜搜一搜官方文档,然后在stackoverflow上找东西,肯定是可以解决的。
回到问题,我给出的解决方案只能是在DEBUG模式下的,而且不适合放到release版本下的,至于release版本如何,官方文档有说明。

#in your urls.py 
##the other codes  
from django.conf.urls.static import static
from django.conf import settings
pastterns('',
    #the others urls,
        )  + 
  static( settings.MEDIA_URL , document_root=settings.MEDIA_ROOT )

#in your settings.py
  MEDIA_ROOT = (BASE_DIR , 'media' )
  MEDIA_URL = '/media/'

#in your views.py , @tolerious done

前台路径的url怎么可能是这种相对路径呢?肯定是绝对路径,例如/media/images/order_person/2015-12-14/imgpath2/2015_12_14_19_40_39_196648iH.jpg这中路径,这个url最好是通过后台传回到前台、不要写死的、BBS_user_object.photo.url把这个传给前台、前台就能正确读取了、

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题