在我的本地PC上我可以做“python manage.py runserver”,网站运行完美,CSS等等。我刚刚将网站部署到公共服务器,虽然大多数工作都有效,但CSS(和图像)没有加载到模板中。
我发现了一些类似问题的其他问题,但我的代码似乎没有遇到任何相同的问题。
在Django项目设置中,正在使用相同的python函数来允许应用程序查看模板和静态CSS /图像文件。视图正在查找模板,并且加载时没有问题。
都来自settings.py:
STATICFILES_DIRS = (
os.path.join(os.path.dirname(__file__), 'templates/css').replace('\\','/'),
os.path.join(os.path.dirname(__file__), 'content').replace('\\','/'),
)
TEMPLATE_DIRS = (
os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),
)
在其余模板都扩展的base.html文件中:
<head>
{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static "style.css" %}" media="screen">
</head>
目录结构:
|project_root/
|--manage.py
|--project/
| |--settings.py
| |--__init__.py
| |--content/
| | |--header.jpg
| |--templates/
| | |--base.html
| | |--css/
| | | |--style.css
我第一次想到CSS没有加载时,Django找不到style.css文件,但因为我使用相同的“os.path.dirname( file )”与模板一样的技术,我不确定是这种情况。
这里有什么问题?
编辑:
我忽略了提到PC和服务器都在运行Python 2.7.5和Django 1.5.5。
答案 0 :(得分:1)
你从未在帖子中提到它,所以我猜:
你从未跑过./manage.py collectstatic
collectstatic
找到所有静态文件(css,images,js)并将它们放在一个目录中(使用django设置STATIC_ROOT
选择此目录)然后将Web服务器指向该目录
答案 1 :(得分:1)
您应该使用服务器部署静态文件,而不是django。
official documentation使用collectstatic
提及但除非你的静态文件搞砸了,否则通常不是必需的。您只需要一些包含所有静态文件的目录。然后你只需将它与服务器一起推到django会看的同一个地方。
假设您的STATIC_URL为'/static/'
,因此您需要添加一个将'/static/'
映射到静态目录的别名。例如,使用Apache,您应该将此行添加到http.conf:
Alias /static/ /path/to/mysite.com/static/
就是这样!这一点也适用于媒体文件,并且删除django为开发服务器(these kinds of urls)完成的任何静态文件服务是明智的。最后,check out the documentation获取有关其他类型部署的更多信息