我正在尝试让我的Django网站使用样式表,直到现在在开发服务器上工作得很好。正如你在下面看到的那样,到目前为止我一直在使用静态文件加载器,但自从我在Apache上部署它以来没有运气。
我现在正在硬编码,但这也不起作用。我使用collectstatic
因此我应该拥有我需要的所有静态文件。我修改了Apache配置文件来提供静态文件(我按照教程)。
<!-- {% load static %}
<link href='{% static "stylesheet.css" %}' rel='stylesheet' type='text/css'>-->
<link href='var/www/html/site/static/stylesheet.css' rel='stylesheet' type='text/css'>
有什么想法吗?
更新:配置文件和settings.py文件:
<VirtualHost *:80>
WSGIScriptAlias / /home/pi/site.wsgi
ServerName 192.168.1.159
Alias /static /var/www/html/site/static/
Alias /static /var/www/html/site/media/txt/
Alias /static /var/www/html/site/media/photos/
<Directory /var/www/html/site/media/txt>
Require all granted
</Directory>
<Directory /var/www/html/site/media/photos>
Require all granted
</Directory>
<Directory /var/www/html/site/static>
Order allow,deny
Allow from all
</Directory>
<Directory /var/www/html/site/>
Allow from all
</Directory>
</VirtualHost>
Settings.py:
STATIC_ROOT = 'static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static'),
'/var/www/html/site/static/',
]
在Apache.conf文件中,我刚刚将其添加到最后:
WSGIPythonPath /var/www/html/site
所做的更改:
STATIC_ROOT = 'static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = [
'/var/www/html/site/app/static', # this line modified to be more
] # clear
FILES_URL = '/media/txt/'
FILES_ROOT = os.path.join(BASE_DIR, 'media/txt')
MEDIA_URL = '/media/photos/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/photos')
在Apache的网站配置文件中进行的更改:
ServerName 192.168.1.159
Alias /static /var/www/html/site/app/static/
Alias /files /var/www/html/site/media/txt/
Alias /media /var/www/html/site/media/photos/
我正在使用这个加载器来获取它:
{% load static %}
<link href='{% static "stylesheet.css" %}' rel='stylesheet'
type='text/css'>
当我输入终端路径并按Enter键时,样式表按预期打开。
答案 0 :(得分:1)
看起来你的Apache配置并不合适。这里有/static
个三个别名:
Alias /static /var/www/html/site/static/
Alias /static /var/www/html/site/media/txt/
Alias /static /var/www/html/site/media/photos/
每个都应该指向不同的别名,如下所示:
Alias /static /var/www/html/site/static/
Alias /media /var/www/html/site/media/
我不是百分百肯定,但我猜测/static
指的是你声明的最后一个,/var/www/html/site/media/photos/
。您可以通过检查浏览器中/var/www/html/site/media/photos/
下的文件来验证这一点:http://yoursite/static/photo_that_exists.jpg
请点击此处了解详情:https://docs.djangoproject.com/en/2.0/howto/deployment/wsgi/modwsgi/#serving-files
无论哪种方式,每个路径只应该有一个Alias
定义。试一试。
答案 1 :(得分:1)
事实证明......我需要做的就是将ServerName 192.168.1.159
更改为ServerName 127.0.0.1
,并将静态文件加载到任何地方。
显然,部署中的Django需要指向127.0.0.1,这是“localhost”的IP表示。如果我使用我的内部IP地址,Django加载程序的静态文件将不接受它。
我要感谢@FlipperPA,他指出了我曾经错过的其他错误。谢谢。
我不认为我对这个问题的理解是正确的,所以如果你有更好的解释,请与我分享。欢呼声。