提供静态文件django 1.9生产错误

时间:2016-08-04 14:57:57

标签: django apache python-2.7 mod-wsgi

我已尝试在其他堆栈溢出帖子中关于在生产中提供Django静态文件的解决方案,但我无法让它们工作。我的静态文件位于我的django app文件夹(联盟)中。

我的CSS文件未正确加载;我在chrome中的控制台中出现以下错误:

Resource interpreted as Stylesheet but transferred with MIME type text/html
Uncaught SyntaxError: Unexpected token !
profile:5 Uncaught SyntaxError: Unexpected token !

我认为css文件被解释为html文件?我不认为javascript文件正在正确加载......

当我在chrome上检查源文件并单击指向css文件的链接时,它们不起作用。所以我猜测到css文件的链接不起作用?

加载css和javascript文件的链接和脚本是:

    <head>
<!-- Latest compiled and minified CSS -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<link rel="stylesheet" href="{% static 'league/css/bootstrap-theme.css' %}">
<link rel="stylesheet" href="{% static 'league/css/bootstrap-theme.min.css' %}">
<link rel="stylesheet" href="{% static 'league/css/bootstrap.css' %}">

<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">

<!-- Latest compiled and minified JavaScript -->

<script type="text/javascript" src="{% static 'league/js/bootstrap.min.js' %}"></script>
<script type="text/javascript" src="{% static 'league/js/npm.js' %}"></script>
<!-- jQuery library -->

<script type="text/javascript" src="http://code.jquery.com/ui/1.9.2/jquery-ui.js"></script>
<link rel="stylesheet" href="{% static 'league/css/f-style.css' %}">
</head>

我的settings.py文件中的相关文件如下:

STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

STATIC_URL = '/league/static/'
SITE_ID = 1
STATIC_ROOT = BASE_DIR + '/league/static/'

我的apache服务器上的配置文件如下:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html
    Alias /static /home/ubunu/project/league/static
    <Directory /home/ubuntu/project/league/static>
            Require all granted
    </Directory>
    <Directory /home/ubuntu/project/fantasy>
            <Files wsgi.py>
                    Require all granted
            </Files>
    </Directory>

    WSGIDaemonProcess project python-path=/home/ubuntu/project:/home/ubuntu/project/myprojectenv/lib/python2.7/$
    WSGIProcessGroup project
    WSGIScriptAlias / /home/ubuntu/project/fantasy/wsgi.py

</VirtualHost>

谢谢!

1 个答案:

答案 0 :(得分:3)

好的,这是一个非常微不足道的问题。你需要做两件事。

首先,当您使用本地python django开发服务器时,只需在app文件夹中查找静态文件,然后为静态文件指定另一个文件夹即可提供静态文件在 STATIC_DIRS 中,它也会查看。

但是,如果您在其他服务器上提供文件,例如 Nginx Herkou Apache 在你的情况下,你需要收集Apache将从中读取静态文件的另一个目录中的所有静态文件。

要实现上述目标,您需要执行python manage.py collectstatic

一旦执行此操作,您的所有静态文件都将收集在 settings.py

STATIC_ROOT值指定的文件夹中

现在其次,如果你的STATIC_ROOT以及STATIC_URL = '/league/static/'在技术上,那么事情将无法奏效,因为这两者是出于不同的目的。

我建议,在BASE目录级别创建一个新文件夹,例如 static_root_content 并更改您的STATIC_ROOT = os.path.join(BASE_DIR, 'static_root_content')

现在,当您运行python manage.py collectstatic时,所有静态数据都将收集在此文件夹中,Apache将从该文件夹中查找静态文件。

STATIC_DIRS和STATIC_ROOT在settings.py中的值不能相同

有关更好的解释,请参阅此文章 - &gt; Differences between STATICFILES_DIR, STATIC_ROOT and MEDIA_ROOT