无法在django上传图像使用MEDIA_ROOT和MEDIA_URL

Use*_*511 1 python django django-models

您好我想在admin django中制作上传图片,但是当我使用media_root和媒体网址图片无法上传时.这是model.py

class Product(models.Model):
    category        = models.ForeignKey('Category')
    userprofile     = models.ForeignKey('UserProfile')
    title           = models.CharField(max_length=50)
    price           = models.IntegerField()
    image           = models.ImageField(upload_to=settings.MEDIA_ROOT)
    description     = models.TextField()
    created_date    = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title;
Run Code Online (Sandbox Code Playgroud)

setting.py

MEDIA_ROOT  = '/static/images/upload/'
MEDIA_URL   = '/upload/'
Run Code Online (Sandbox Code Playgroud)

view.py

def home(request):
    posts = Product.objects.filter(created_date__isnull=False)
    return render(request, 'kerajinan/product_list.html', {
        'posts'         : posts,
        'categories'    : Category.objects.all(),
    })
Run Code Online (Sandbox Code Playgroud)

这是tamplate product.html

<img src="{{post.image.url}}" alt="" />
Run Code Online (Sandbox Code Playgroud)

你能帮我解决这个问题吗?

cat*_*ran 9

MEDIA_ROOT是上传图像的绝对路径,因此您应将设置更改为以下内容:

MEDIA_ROOT = os.path.join(BASE_DIR, 'static/images/upload')
Run Code Online (Sandbox Code Playgroud)

第二个问题是图像字段定义. upload_toargument是一个对于MEDIA_ROOT/ 的路径MEDIA_URL.

image = models.ImageField(upload_to='product')
Run Code Online (Sandbox Code Playgroud)

最好添加一些strftime()格式以减少单个目录中的文件数量:

image = models.ImageField(upload_to='product/%Y/%m/%d')
Run Code Online (Sandbox Code Playgroud)