MEDIA_ROOT错误:_getfullpathname:路径应为字符串,字节或os.PathLike,而不是元组

时间:2019-01-18 15:42:07

标签: django

我是Django框架的新手。 当我在设置中使用MEDIA_ROOT = os.path.join(BASE_DIR, 'media'),命令时,尝试以http://127.0.0.1:8000/admin/products/product/add/(管理模式)上载图像时遇到以下错误:

_getfullpathname: path should be string, bytes or os.PathLike, not tuple

当我尝试删除MEDIA_ROOT = ...时,也会消除该错误,并且图像将正确放置在媒体文件夹的路径上。 我认为使用MEDIA_ROOT的原因是为了了解媒体文件到Django的路径,但是:

1)为什么在使用它时会遇到错误

2)为什么我删除此命令,一切顺利? 谢谢

setting.py

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media'),
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static'),

错误截图为 getfullpathname: path should be string, bytes or os.PathLike, not tuple

project / urls.py

from django.urls import path, include
from django.conf.urls.static import static
from django.conf import settings

urlpatterns = [
#url will be here
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

我的模型中只有一个图像场。py:

from django.db import models

# Create your models here.


class Product(models.Model) :
    name = models.CharField(max_length=100 , verbose_name="نام جنس",null=True,blank=True)
    category = models.ForeignKey('Category',on_delete=models.CASCADE , verbose_name="دسته بندی" , null=True ,blank=True)
    price = models.IntegerField(verbose_name="قیمت" ,null=True,blank=True)
    property=models.ForeignKey('Property',on_delete=models.CASCADE , verbose_name="ویژگی" , null=True,blank=True)
    description = models.TextField(verbose_name="توضیحات",null=True,blank=True)
    image=models.ImageField(upload_to="media/productimage/")


class Property(models.Model):
    color = models.CharField(max_length=40 , verbose_name="رنگ",null=True,blank=True)
    made = models.CharField(max_length=40 , verbose_name="ساخت کشور" , null=True,blank=True) #made in country


class Category(models.Model):
    name = models.CharField(max_length=100 , verbose_name="دسته بندی" , null=True,blank=True)

2 个答案:

答案 0 :(得分:0)

date <- data.frame(date = c("November 1–2, 2018", "October 22–28, 2018", "October 15–28, 2018")) 中的MEDIA_ROOTSTATIC_ROOT变量的值都带有一个逗号结尾。尾部逗号将这些变量的值从字符串转换为元组。

settings.py

删除尾部逗号应该可以解决问题。

MEDIA_ROOT = os.path.join(BASE_DIR, 'media'),  # This is a tuple
STATIC_ROOT = os.path.join(BASE_DIR, 'static'),  # So is this

答案 1 :(得分:0)

""" Managing media
"""
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = "/media/"

此外,如果您在加入 os 路径时遇到错误,请在同一个 settings.py 文件中导入 os