4

我对 django 有点陌生,我在模型中使用了 stdimage 模块。当我通过管理员上传图像并保存时,在打开模型对象时,我发现该字段包含三件事

  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 是由错误的 url 带来的。我怎样才能让它有正确的网址?

这是我的模型:

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"
    )
4

1 回答 1

0

ImageField 的 URL 是这样的

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)
于 2012-11-28T16:47:45.243 回答