我的css文件无效Production server
。我使用WSGI
部署了。请问你能解决我的问题吗?谢谢
css link
<link href="{{ MEDIA_URL}}css/style.css" rel="stylesheet" type="text/css" />
settings.py
CURRENT_PATH = '/home/nibbler/code/project/
MEDIA_ROOT = os.path.join(CURRENT_PATH, 'templates/media')
MEDIA_URL = '/media/'
TEMPLATE_DIRS = (
os.path.join(CURRENT_PATH, 'templates/temp_name'),
)
site-available\default
<VirtualHost *:80>
ServerAdmin me@me.com
ServerName project.org
DocumentRoot "/home/nibbler/code/project/"
ServerName localhost
ErrorLog "/home/nibbler/code/project/logs/apache-error.log"
CustomLog "/home/nibbler/code/project/logs/apache-access.log" common
Options ExecCGI FollowSymLinks MultiViews
AddHandler wsgi-script .wsgi
WSGIDaemonProcess nibbler
WSGIProcessGroup nibbler
Alias /media /home/nibbler/code/project/templates/media/
WSGIScriptAlias / /home/nibbler/code/project/apache/django.wsgi
DirectoryIndex index.html index.cgi
AddHandler cgi-script .cgi .pl
</VirtualHost>
urls.py
if settings.DEBUG:
# static files (images, css, javascript, etc.)
urlpatterns += patterns('',
(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT}))
答案 0 :(得分:1)
你有:
Alias /media /home/nibbler/code/project/templates/media/
错误的开始。尝试:
Alias /media/ /home/nibbler/code/project/templates/media/
他们必须要么都有尾随斜线,要么都没有斜杠。你不能拥有它而另一个没拥有它。
顺便说一下,有:DocumentRoot "/home/nibbler/code/project/"
是一个坏主意。不要将DocumentRoot设置为代码所在的位置。如果您出于某种原因要删除WSGISriptAlias,那么所有代码都可以由外部人员下载。
您还缺少一个带有Allow指令的Directory块,其中包含WSGI脚本文件和静态文件。这意味着你在这个虚拟主机之外改变了Apache配置,以某种方式说Apache可以从盒子上的任何目录提供文件,这是一个坏主意,因为它剥夺了一级安全性。
答案 1 :(得分:0)
您只有CSS文件或所有媒体文件存在问题吗?
MEDIA_ROOT
- 应该是系统上文件的完整路径,看起来你已经拥有它,很好。
MEDIA_URL
- 尝试将完整的URL放到媒体文件中。尝试使用完整网址手动访问它们,并查看网络服务器是否正确提供它们。如果是,则将完整的URL放入MEDIA_URL。
生产中不需要使用if settings.DEBUG
显示的最后一件事。你真的想在生产服务器上设置DEBUG = False。
顺便说一句,Django建议有两个虚拟主机 - 一个用于Django应用程序本身,另一个用于媒体(你只使用http服务器直接提供静态内容,没有动态内容)。
希望有所帮助...