1

很奇怪,我的 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 发布。

4

3 回答 3

1

当 DEBUG=False 时,静态文件不做任何事情。您需要使用 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"),
]

这假设您的静态文件位于项目的静态文件夹中,并且您希望从site_media文件夹中提供它们。

于 2013-02-17T02:16:11.920 回答
1

我发现当 debug=False 时,django 不会自动加载静态文件。选项在 urls.py 中设置静态路径或使用 apache 提供静态文件。人们说在 urls.py 中设置静态路径比使用 apache 提供静态文件要慢。虽然不知道为什么...

于 2013-02-16T03:20:32.743 回答
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 稍微修改它。希望对您有所帮助。

于 2013-02-15T13:34:27.393 回答