Django静态文件不可见

时间:2014-07-20 17:17:52

标签: django mod-wsgi django-staticfiles apache2.2

我的Django网站不会使用Django静态文件管理显示CSS或JS

我的 html live version available here

{% load staticfiles %}
<html>
    <head>

        <!-- THESE WORK LOCALY BUT DO NOT WORK ON THE SERVER -->              
        <link rel = "stylesheet" href ="{% static "survey/css/bootstrap.min.css" %}" >
        <link rel = "stylesheet" href ="{% static "survey/css/bootstrap.css" %}"> 

        <link rel="stylesheet" href ="{% static "survey/css/jquery-ui.css" %}"> 

        <link rel="stylesheet" href ="{% static "survey/css/slider.css" %}">                
        <link rel="stylesheet" href="{% static "survey/resources/demos/style.css"  %}">    

        <script src="{% static "survey/js/jquery.min.js" %}"></script>               
        <script src="{% static "survey/js/jquery-ui.js" %}"></script>   
        <script src="{% static "survey/js/slider.js" %}"></script>

我的 settings.py

STATIC_ROOT = '/var/www/bias_experiment/static'
STATIC_URL = '/static/'

我的Apache默认文件 / etc / apache2 / sites-available / defaults

注意:我无法使用<VirtualHost>,因为“您使用的服务器名称是该服务器的主要名称”as I found out in another SO question所以我已将所有内容放入默认文件。

<VirtualHost *:80>

AliasMatch ^/([^/]*\.css) /var/www/bias_experiment/src/survey/static/$1

Alias /static/ /var/www/bias_experiment/src/survey/static/
<Directory /var/www/bias_experiment/src/survey/static>
Order deny,allow
Allow from all
</Directory>

WSGIScriptAlias /bias_experiment /var/www/bias_experiment/src/bias_experiment/index.wsgi
<Directory /var/www/bias_experiment/src/bias_experiment>
<Files index.wsgi>
Order deny,allow
Allow from all
</Files>
</Directory>

....
(other Apache default code here) 
....

</VirtualHost>
  • 'django.contrib.staticfiles',包含在INSTALLED_APPS
  • 我已将静态文件夹的权限设置为www-data
  • 我已经collectstatic

这是`colllectstatic'

的一些输出
....
Copying '/var/www/bias_experiment/src/survey/static/survey/css/jquery-ui.theme.css'
Copying '/var/www/bias_experiment/src/survey/static/survey/css/bootstrap.min.css'
Copying '/var/www/bias_experiment/src/survey/static/survey/css/bootstrap-theme.css'
Copying '/var/www/bias_experiment/src/survey/static/survey/css/slider.css'

36 static files copied, 103 unmodified.
 - I have restarted Apache

我在运行Apache 2.2.22和mod_wsgi的共享VM上运行3.3-4ubuntu0.1

然而,没有任何静态文件会出现。

非常感谢任何帮助

编辑1

根据史蒂文斯的建议,我已将静态根更新为

STATIC_ROOT = '/var/www/bias_experiment/src/survey/static/'

但没有运气。

编辑2

这是每个文件的文件权限,包括一个CSS文件。我相信他们是对的?

/var/www/bias_experiment/static/survey/css/bootstrap.css

-rw-r--r-- 1 www-data www-data 121463 Jul 22 19:17 bootstrap.css

的/ var / WWW / bias_experiment /静态/调查/ CSS

drwxr-xr-x 2 www-data www-data 4096 Jul 22 19:17 css

的/ var / WWW / bias_experiment /静态/调查

drwxr-xr-x 6 www-data www-data 4096 Jul 18 14:44 survey

的/ var / WWW / bias_experiment /静态

drwxr-xr-x 10 www-data www-data 4096 Jul 22 19:17 static

编辑3 ls -ltr / var / www / bias_experiment / src / survey / static /

enter image description here

4 个答案:

答案 0 :(得分:2)

您的STATIC_ROOT不正确,应该是

STATIC_ROOT = /var/www/bias_experiment/src/survey/static/

您是否正确设置了STATICFILES_DIRS:根据collectstatic的输出,您的静态根似乎可能在此元组中。

最后,AliasMatch做了什么有用的事情?

答案 1 :(得分:1)

在您的apache配置文件中,将“允许从所有”更改为“需要全部授予”。还要确保您对静态文件具有正确的文件权限。

答案 2 :(得分:1)

在您的实际网站上,我注意到您的静态文件收到了403 Forbidden次回复,这意味着这些文件存在,但www-data对它们没有读取权限。确保以递归方式chown静态根(在所有静态资产存在之后)。

一个简单的sudo chown -R www-data:www-data /var/www/bias_experiment/src/survey/static/应该修复它。

答案 3 :(得分:1)

Erm ... STATIC_ROOT必须是您希望收集静态文件的文件夹,STATICFILES_DIRS是收集静态文件的文件夹来自 more info。因此,STATICFILES_DIRS应该在您的STATIC_ROOT文件夹之外,并且您希望Apache提供STATIC_ROOT中的文件。

正确设置STATIC_ROOT和STATICFILES_DIRS(测试它的一种方法是在本地主机上运行,​​调用collectstatic后DEBUG = True模式 DEBUG = False模式),你只需要设置一个静态的别名。

WSGIScriptAlias / <REPLACE_BY_YOUR_WSGI_FILE_PATH>
Alias /static/ <REPLACE_BY_YOUR_STATIC_ROOT>