很奇怪我的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版本。
答案 0 :(得分:1)
我发现当debug = False时,django不会自动加载静态文件。选项在urls.py中设置静态路径或使用apache提供静态文件。 人们说urls.py中设置静态路径比使用apache提供静态文件要慢。不知道为什么......
答案 1 :(得分: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将这些文件从开发站点复制到部署点,但这些变量控制静态文件如何发挥其魔力
# 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 文件夹中提供这些文件。
答案 2 :(得分: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略微修改它。希望能帮到你。