我正在使用Django 2
我有一个模型Course
来创建课程并将横幅图像上传为ImageField()
class Course(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
name = models.CharField(max_length=250)
banner = models.ImageField(upload_to='course/%Y/%m/%d', blank=True)
位于settings
app/settings/local.py
个文件中
# at top of settings file, defined BASE_DIR
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static_dir')
]
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static_cdn', 'static_root')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static_cdn', 'media_root')
图片上传完美,但上传的位置在项目目录之外。假设我的项目位于my_project
目录中,其中包含app
模块和其他模块以及static_dir
来存储静态文件。
但是static_cdn
目录是在my_project
目录之外创建的。
我希望它在my_project
目录中。
有什么问题?
编辑2
DEBUG = False
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static_dir')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'static_cdn', 'static_root')
答案 0 :(得分:1)
删除一个os.path.dirname()调用,应该可以正常工作
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
或者您可以保持BASE_DIR不变并更改MEDIA_ROOT和STATIC _ROOT
STATIC_ROOT = os.path.join(BASE_DIR, 'static_cdn', 'static_root')
MEDIA_ROOT = os.path.join(BASE_DIR, 'static_cdn', 'media_root')
我认为第二种选择是最好的
答案 1 :(得分:0)
回答编辑2
如果您有DEBUG = False,那么您正在生产模式下运行
请阅读https://docs.djangoproject.com/en/2.0/howto/static-files/deployment/
您也可以使用http://whitenoise.evans.io/en/stable/
此外,如果您设置DEBUG = True,它应该可以正常工作
建议:不要在生产中设置DEBUG = True