Django 媒体根目录:我应该硬编码路径还是使用os.path.join?
Django 1.11 文档显示,我们应该将图像放置到 /var/www//media/ 但在《两勺Django》一书中,他们建议:Django 媒体根目录:我应该硬编码路径还是使用os.path.join?,django,Django,Django 1.11 文档显示,我们应该将图像放置到 /var/www//media/ 但在《两勺Django》一书中,他们建议: # Configuring MEDIA_ROOT # ’DONT DO THIS! Hardcoded to just one user's preferences MEDIA_ROOT = "/Users/pydanny/twoscoops_project/media" 然后建议他们的方式: root = lambda *dirs: join(abspath
# Configuring MEDIA_ROOT
# ’DONT DO THIS! Hardcoded to just one user's preferences
MEDIA_ROOT = "/Users/pydanny/twoscoops_project/media"
然后建议他们的方式:
root = lambda *dirs: join(abspath(BASE_DIR), *dirs)
# Configuring MEDIA_ROOT
MEDIA_ROOT = root("media")
你接受两勺Django推荐的方式吗?
在这种情况下,MEDIA_ROOT将位于项目本身内部。我认为这很糟糕。这在某种程度上是代码和用户数据的混合
因此,我喜欢Django的文档所建议的:只需硬编码一个到/var/www/example.com/media/的路径
媒体根甚至不是静态根。静态文件是从项目内部收集的。它们包含的东西或多或少是一个代码(CSS)。而用户上传的文件肯定是数据,而不是代码
你能评论一下吗?你的媒体根是什么样子的?
我应该为我的本地机器和生产服务使用不同的介质吗?我曾经使用过以下方法:
ENV_PATH = os.path.abspath(os.path.dirname(__file__))
MEDIA_ROOT = os.path.join(ENV_PATH, 'media/')
这将自动检测settings.py文件的绝对路径并创建媒体根路径。我曾经使用过以下方法:
ENV_PATH = os.path.abspath(os.path.dirname(__file__))
MEDIA_ROOT = os.path.join(ENV_PATH, 'media/')
这将自动检测settings.py文件的绝对路径并创建媒体根路径。我更喜欢使用硬编码。因此,我有两个不同的设置。py;一个用于生产,一个用于开发机器。我必须注意的是,这不仅适用于媒体根目录设置,而且我在dev和prod中使用其他不同的设置。它适合团队吗?您有一台用于生产的服务器。而硬编码的东西并没有那么可怕:它非常适合这个服务器。但你们的队友在他们自己的机器上工作。只要你们不把你们的development settings.py添加到版本控制系统中。他们都可以有自己的开发设置.py,所以团队采用它并不困难。您的媒体根指向var/www/吗?我的意思是“www”具有以下权限:drwxr-xr-x 5 root。这可能不太方便。如果在www内创建目录,则必须允许django进程在其中写入。不,它不包含,因此不在我的项目文件夹下。我通常更喜欢在媒体根目录的上方创建一个文件夹,因为这通常也是我填充virtualenv文件的地方,这样,它也不会影响版本控制系统。我也不把我的项目放在/var/www/下,我通常使用我在服务器上创建的其他路径。我更喜欢使用硬编码。因此,我有两个不同的设置。py;一个用于生产,一个用于开发机器。我必须注意的是,这不仅适用于媒体根目录设置,而且我在dev和prod中使用其他不同的设置。它适合团队吗?您有一台用于生产的服务器。而硬编码的东西并没有那么可怕:它非常适合这个服务器。但你们的队友在他们自己的机器上工作。只要你们不把你们的development settings.py添加到版本控制系统中。他们都可以有自己的开发设置.py,所以团队采用它并不困难。您的媒体根指向var/www/吗?我的意思是“www”具有以下权限:drwxr-xr-x 5 root。这可能不太方便。如果在www内创建目录,则必须允许django进程在其中写入。不,它不包含,因此不在我的项目文件夹下。我通常更喜欢在媒体根目录的上方创建一个文件夹,因为这通常也是我填充virtualenv文件的地方,这样,它也不会影响版本控制系统。我也没有将我的项目保存在/var/www/下,我通常使用我在服务器上创建的其他路径。在项目内部?我的意思是,为什么它在项目中而不是在var/www中?是的,您可以创建.env文件并将您的媒体根目录设置为您想要的任何位置。创建.env文件不是一种惯例,而是一种有效的方法,这样我们可以在单个文件中进行更改。为什么将上载的文件保留在项目中?它有益吗?根据django文档,它给出了一个绝对路径的示例:没有关于首选项或有益部分的内容。这不仅仅是绝对路径的一个例子。该文档介绍了最佳实践。在讨论Django文档的改进时经常提到它。在项目内部?我的意思是,为什么它在项目中而不是在var/www中?是的,您可以创建.env文件并将您的媒体根目录设置为您想要的任何位置。创建.env文件不是一种惯例,而是一种有效的方法,这样我们可以在单个文件中进行更改。为什么将上载的文件保留在项目中?它有益吗?根据django文档,它给出了一个绝对路径的示例:没有关于首选项或有益部分的内容。这不仅仅是绝对路径的一个例子。该文档介绍了最佳实践。在讨论Django文档的改进时,经常提到它。