Django 1.6 图片上传和媒体路径

1 投票
2 回答
1585 浏览
提问于 2025-04-18 04:00

我在webfaction上有一个项目,需要创建两个不同的环境,一个用来运行django,另一个用来存放静态文件。

当我从管理面板上传一张图片时,我发现图片被放在我定义的根目录下,但路径是完整的。当我在我的视图中返回这张图片时,得到的链接是我的域名.com/full/media/root/path/imagename。

这就导致了一个坏链接——当我访问mydomain.com/uploads/image_name时,我可以看到图片文件确实在那儿,但我的链接指向的是完整路径,而不是根目录的链接。

你能帮我解决这个问题吗?我真的不明白如何在我的视图中修正这个图片链接。

<img src="{{ MEDIA_URL }}{{ mymodel.my_image }}" alt="{{ name }}" width="150" height="200" />

我知道这里有很多类似的主题,但没有一个能正确指导我如何隐藏或将路径根改为“uploads”。

在我的管理面板中,这个功能运行得很好。

class Movie(models.Model):

name = models.CharField(max_length=50)


def get_file_path(instance, filename):
    ext = filename.split('.')[-1]
    filename = "%s.%s" % (uuid.uuid4(), ext)
    return os.path.join( '/home/user/webapps/project/uploads/' , filename)


my_image = models.ImageField(upload_to = get_file_path, null=True, blank=True)
def __unicode__(self):
    return self.name

在我的设置中:

MEDIA_ROOT = '/home/user/webapps/project/uploads/'
MEDIA_URL = '/uploads/'

还有项目的URL:

from django.conf.urls import patterns, include, url
from django.conf import settings

  from django.contrib import admin
  admin.autodiscover()

  urlpatterns = patterns('',      
    url(r'^admin/', include(admin.site.urls)),
  )


if settings.DEBUG:
urlpatterns += patterns('',
(r'^uploads/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT}))

提前感谢大家的帮助。

2 个回答

1

你可以使用:

{{ mymodel.my_image.url }}
1

首先,在你的模型中,你需要创建一个图片字段,并在这里定义你想把图片上传到哪里:

class mymodel(models.Model):
    name = models.CharField(max_length=50)
    my_image = models.ImageField(blank=True, null=True,upload_to='/home/user/webapps/project/uploads/')

之后,在你的模板中,当你想展示图片时,获取到数据库中的模型对象后,可以试试这样做:

<img src="{{ mymodel.my_image.url }}" alt="{{ mymodel.name }}" width="150" height="200" />

撰写回答