我的Django项目在debug=false时无法加载静态文件

1 投票
3 回答
625 浏览
提问于 2025-04-17 15:59

我觉得很奇怪,我的django网站(在一台装有django 1.3的linux服务器上搭建)在DEBUG = True的时候可以正常访问。但是当我把这个选项改成DEBUG = False的时候,静态内容就加载不出来了(css文件和图片都找不到)

这是我在setting.py里找到的相关选项:

DEBUG = False
STATIC_ROOT = ''
ADMIN_MEDIA_PREFIX = '/static/admin/'
STATICFILES_DIRS = ("/home/ubuntu/ls_website/static/",)
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

有没有人知道这是怎么回事?如果版本太低,我可以等一段时间再看看1.5的发布。

3 个回答

0

我在开发的时候也会在Windows和Linux之间切换。为了处理settings.py文件中的绝对路径问题,我使用了这个函数:

def map_path(directory_name):
    return os.path.join(os.path.dirname(__file__),
        '../' + directory_name).replace('\\', '/')

你可以这样来实现它:

STATICFILES_DIRS = (
    map_path('static'),
)

这个函数是专门为Django 1.4.x版本设计的。如果你用的是Django 1.3.x版本,需要稍微修改一下。希望这对你有帮助。

1

当DEBUG设置为False时,Staticfiles不会做任何事情。你需要用apache来提供这些文件。Staticfiles可以把文件收集到一个地方,这样就方便你使用,然后你需要用一些apache的设置(这里假设你没有具体说明)来让apache拦截这些请求,并为你提供静态文件。

    Alias /robots.txt  /home/username/Python/project/site_media/static/robots.txt
    Alias /favicon.ico /home/username/Python/project/site_media/static/favicon.ico
    Alias /static/     /home/username/Python/project/site_media/static/

我不记得是buildstatic、build_static、collectstatic还是collect_static来把这些文件从你的开发环境复制到你的部署环境,但这些变量控制着staticfiles是如何工作的。

# Absolute path to the directory that holds static files like app media.
# Example: "/home/media/media.lawrence.com/apps/"
STATIC_ROOT = os.path.join(PROJECT_ROOT, "site_media", "static")

# URL that handles the static files like app media.
# Example: "http://media.lawrence.com"
STATIC_URL = "/static/"

# Additional directories which hold static files
STATICFILES_DIRS = [
    os.path.join(PROJECT_ROOT, "static"),
    os.path.join(PROJECT_ROOT, "media"),
]

这假设你的静态文件在项目的static文件夹里,而你想从site_media文件夹提供它们。

1

我发现当debug=False时,Django不会自动加载静态文件。可以选择在urls.py中设置静态文件的路径,或者用Apache服务器来提供静态文件。有人说在urls.py中设置静态路径比用Apache提供静态文件要慢,但我也不知道为什么……

撰写回答