我能';t使用Python定义STATICFILES\u DIRS以找出路径

我能';t使用Python定义STATICFILES\u DIRS以找出路径,python,django,Python,Django,我希望能够使用python来定义静态/媒体文件的设置,以获得路径,这样我就不需要在我的开发机器和服务器上进行不同的设置 所以我有这些设置 import os from unipath import Path ### PATH CONFIGURATION # Absolute filesystem path to the top-level project folder SITE_ROOT = Path(__file__).ancestor(3) ### MEDIA CONFIGURATION

我希望能够使用python来定义静态/媒体文件的设置,以获得路径,这样我就不需要在我的开发机器和服务器上进行不同的设置

所以我有这些设置

import os
from unipath import Path

### PATH CONFIGURATION
# Absolute filesystem path to the top-level project folder
SITE_ROOT = Path(__file__).ancestor(3)

### MEDIA CONFIGURATION
MEDIA_ROOT = SITE_ROOT.child('media')
MEDIA_URL = '/media/'
### END MEDIA CONFIGURATION

### STATIC CONFIGURATION
STATIC_ROOT = SITE_ROOT.child('static')
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = os.path.join(SITE_ROOT, 'static'),
我的问题是,在本地它不会加载静态文件,并且终端说
STATICFILES\u DIRS
不应该包含
STATICFILES\u ROOT

可以让Python像这样加载路径吗?还是我在浪费时间?

这样做:

import os
settings_dir = os.path.dirname(__file__)
PROJECT_ROOT = os.path.abspath(os.path.dirname(settings_dir))

MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media/')
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static/')

STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static/'),
)

这应该行得通。希望有帮助

您的代码本身没有问题,只是应用程序的目的是将文件从
STATICFILES\u DIRS
中指定的目录复制到
STATIC\u ROOT
中指定的目录中,因此,在
STATICFILES\u DIRS
设置中包含
STATIC\u ROOT
目录没有多大意义

除非您实际将
staticfiles
应用程序与
/manage.py collectstatic
一起使用,否则您最好将
staticfiles\u DIRS
设置保留为空,即只需更改

STATICFILES_DIRS = os.path.join(SITE_ROOT, 'static'),
…到

STATICFILES_DIRS = ()

+其他两个答案都是1。如果您厌倦了大量键入
os.path.bla
,这里有一个快捷方式,您可以将其放置在设置文件的顶部(或从其他任何地方导入)


非常聪明:也可以这样做:
rel=lambda x:os.path.join(os.path.abspath(os.path.dirname(_文件))x)
:)很好的提示!精彩的解释,谢谢。我已经使用Django一年多了&实际上没有使用静态应用程序!
def rel(*x):
    return os.path.join(os.path.abspath(os.path.dirname(__file__)), *x)

STATICFILES_DIRS = (
    rel('static'),
)