0

我希望能够使用 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_DIRS应该包含STATICFILES_ROOT.

是否有可能让 Python 加载这样的路径,还是我在浪费时间?

4

3 回答 3

3

您的代码本身没有问题,只是staticfiles应用程序的目的是将文件从指定的目录复制到指定STATICFILES_DIRS的目录中,因此将目录包含在设置STATIC_ROOT中没有多大意义。STATIC_ROOTSTATICFILES_DIRS

除非您实际使用该staticfiles应用程序,否则您./manage.py collectstatic最好将STATICFILES_DIRS设置留空,即只需更改...

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

...至...

STATICFILES_DIRS = ()
于 2013-05-17T18:12:49.497 回答
3

这样做:

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/'),
)

那应该行得通。希望能帮助到你!

于 2013-05-17T18:06:30.873 回答
2

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

def rel(*x):
    return os.path.join(os.path.abspath(os.path.dirname(__file__)), *x)

STATICFILES_DIRS = (
    rel('static'),
)
于 2013-05-17T19:07:08.753 回答