我是 Django 的初學者,這正是它的作用。我按照文檔中的說明進行操作,但無論如何,也許出了什么問題?從管理頁面我添加\設置產品并選擇“圖像”,然后當我保存它時創建縮略圖并嘗試保存在“/media/uploads/”中,但它創建另一個“媒體”文件夾當站點路徑為“/media/uploads/img.png”時,圖像存儲在“/media/media/uploads/img.png”中。這是代碼:/shop/settings.py:MEDIA_URL = '/media/'MEDIA_ROOT = os.path.join(BASE_DIR, 'media') # or even 'media/'/shop/urls.py:urlpatterns = [ ...] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)添加后,然后在我的產品模型中我這樣做:/apps/store/models.py:class Product(models.Model): ... image = models.ImageField(upload_to='media/uploads/', blank=True, null=True) thumbnail = models.ImageField(upload_to='media/uploads/', blank=True, null=True) ... def save(self, *args, **kwargs): self.thumbnail = self.make_thumbnail(self.image) super().save(*args, **kwargs) @staticmethod def make_thumbnail(image, size=(512, 512)): if not image: return img = Image.open(image) if img.mode in ('RGBA',): # converting image to RGB if it's RGBA img.load() rgb_convert = Image.new('RGB', img.size, 0) rgb_convert.paste(img, mask=img.split()[3]) img = rgb_convert img.thumbnail(size) thumb_io = BytesIO() img.save(thumb_io, 'PNG', quality=80) thumb = File(thumb_io, name=image.name) return thumb我嘗試將“upload_to”更改為“uploads/”,然后它以正確的方向存儲文件,但現場路徑也更改為“/uploads/img.png”,而它必須是“/media/uploads/img” .png'有什么問題嗎?謝謝!
2 回答

牛魔王的故事
TA貢獻1830條經驗 獲得超3個贊
參數upload_to=…
[Django-doc]是相對于MEDIA_ROOT
.?因此,如果您想將其存儲在目錄uploads
中的某個目錄中media
,請使用以下命令上傳:
class?Product(models.Model): ????#?… ????thumbnail?=?models.ImageField(upload_to='uploads/',?blank=True,?null=True)
然而,為了呈現URL,您需要使用.url
屬性 [Django-doc],因此:
{%?if?p.thumbnail?%} ????<img?src="{{?p.thumbnail.url?}}"> {%?endif?%}
這里有{% if p.thumbnail %}
必要檢查NULL
/None
值。

繁星淼淼
TA貢獻1775條經驗 獲得超11個贊
這是因為你寫了“upload_to='media/uploads'”..從你的設置中django將創建媒體文件夾,并且由于你寫了“media/uploads”,uploads位于媒體文件夾內,該文件夾位于設置中聲明的主媒體內。所以就寫
class Product(models.Model):
…
thumbnail = models.ImageField(upload_to='uploads/', blank=True, null=True)
添加回答
舉報
0/150
提交
取消