我的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 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 /
答案 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>