4

私はdjangoに少し慣れていないので、モデルでstdimageモジュールを使用していました。管理者から画像をアップロードして保存すると、モデルオブジェクトを開くと、フィールドに3つのものがあります。

  1. 現在の画像:すでにアップロードされている画像へのリンクを提供します(例:uploaded_images / 2012/11/28 / map_7.jpeg)
  2. 変更:画像を変更するためのプロビジョニングです
  3. 削除:アップロードされた画像を削除するためのチェックボックス付き。画像を追加してオブジェクトを保存すると、/ admin / oxer / site / 41 /でエラーIOErrorが発生し、画像リンクをクリックすると404エラーが発生し、画像のURLがitech.com/admin/oxerとして表示されます。 itech.com/static/uploaded_images/2012/11/04/image_1.jpegの代わりに/site/49/uploaded_images/2012/11/04/image_1.jpeg(「admin / oxer / site/49」を削除したことに注意してください'static'に置き換えられました)。

ioerrorは間違ったURLによってもたらされたと思います。どうすれば正しい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 に答える