将样式表链接到Apache上的Django网站

时间:2017-12-15 20:53:29

标签: django apache

我正在尝试让我的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键时,样式表按预期打开。

2 个答案:

答案 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,他指出了我曾经错过的其他错误。谢谢。

我不认为我对这个问题的理解是正确的,所以如果你有更好的解释,请与我分享。欢呼声。