2012-11-28 42 views
4

我在django中有点新,并且我在我的模型中使用了stdimage模块。当我通过管理员上传图片并保存,在打开的模型对象我觉得有三样东西管理员中的无效stdmage图像路径

领域
  1. 当前图像:这给链接已上传的图片如uploaded_images/2012/11/28 /人map_7.jpeg
  2. 更改:这是提供更改图像
  3. 删除:用复选框删除上传的图像。 当我添加一个图像并保存该对象时,我得到/ admin/oxer/site/41 /上的错误IOError,当我点击图像链接时,我得到404错误,图像URL显示为itech.com/admin/ oxer/site/49/uploaded_images/2012/11/04/image_1.jpeg而不是itech.com/static/uploaded_images/2012/11/04/image_1.jpeg(请注意,我已将'admin/oxer/site/49 '并替换为'静态')。

我想ioerror是由错误的网址带来的。我怎么能让它有正确的网址?

这里是我的模型:

class Site(CommonMixin, ImageMixin): 

    __metaclass__ = TransMeta 

    name = models.CharField(max_length=255, verbose_name=_("Name")) 
    description = models.TextField(verbose_name=_("Description")) 
    has_airport = models.BooleanField(default=False) 
    rating = models.IntegerField() 
    order = models.IntegerField() 
    do_not_miss = models.TextField(verbose_name=_("Do not miss")) 
    recommended_stay = models.TextField(verbose_name=_("Recommended stay")) 
    address = models.CharField(max_length=255, verbose_name=_("Address")) 
    state = models.CharField(max_length=100, verbose_name=_("State")) 
    price = models.TextField(verbose_name=_("Price")) 
    good_to_know = models.TextField(verbose_name=_("Good to know")) 
    link = models.URLField(blank=True, null=True) 
    region = models.ManyToManyField('Region', blank=True, null=True) 
    interests = models.ManyToManyField('Interest', blank=True, null=True) 
    map = StdImageField(
     upload_to='uploaded_images/%Y/%m/%d', 
     max_length=255, 
     height_field='height', 
     width_field='width', 
     size=(453, 294, True), 
     thumbnail_size=(195, 150, True), 
     blank=True, 
     null=True 
    ) 
    location_lat = models.DecimalField(
     u'Location (latitude)', max_digits=10, decimal_places=7, default=0, 
     help_text=u"You can use http://www.getlatlon.com to get a location's coordinates" 
    ) 
    location_lon = models.DecimalField(
     u'Location (longitude)', max_digits=10, decimal_places=7, default=0, 
     help_text=u"You can use http://www.getlatlon.com to get a location's coordinates" 
    ) 

回答

0

的ImageField的的网址是这样

upload_to='uploaded_images/%Y/%m/%d', 

这个路径是相对于你的MEDIA_URL。 假设您正在访问http://site/admin/auth/user。 如果在此页面中,你有这种类型的

<a href="uploaded_images/2012/11/28/file.ext">Anchor</a> 

的某条链路将指向

http://site/admin/auth/user/uploaded_images/2012/11/28/file.ext 

这是你得到什么,显然是错误的。

长话短说,得到的答案是,你必须预先存储与MEDIA_URL 路径而可能是

MEDIA_URL = '/media/' (the slash at the beginning points to the domain root) 

MEDIA_URL = 'http://domain/media/' (might be redundant) 
+1

加入MEDIA_URL = '/媒体/',图像后路径现在变成itech.com/media/uploaded_images/2012/11/28/map_7.jpeg,因为stdimage正在使用MEDIA_URL的值。它会在点击时带来404错误,因为我的STATIC_URL ='/ static /'。问题是,路径应该是itech.com/static/uploaded_images/2012/11/28/map_7.jpeg,以显示图像。我无法为STATIC和MEDIA_URL使用相同的值。任何帮助? – Alexxio

+1

我通过STATIC_URL ='/ static /'和MEDIA_URL ='/ static \ t /'修复了它。我不知道'\ t'是否会对该项目产生任何影响。谢谢史蒂夫。正如你所建议的那样,MEDIA_URL ='...'是需要的,所以它的val会放到itech.com/"HERE"/uploaded_images/2012/1/28/map_7.jpeg。它现在工作。当我点击链接时,图像显示。 – Alexxio