CSS文件未出现在生产服务器中

时间:2011-12-03 08:09:06

标签: django django-templates

我的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}))

2 个答案:

答案 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服务器直接提供静态内容,没有动态内容)。

希望有所帮助...