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

问题描述 投票:0回答:2

我试图让我的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.朋友:

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键时,样式表按预期打开。

django apache
2个回答
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
投票

事实证明......我需要做的就是将ServerName 192.168.1.159更改为ServerName 127.0.0.1,静态文件加载起来就像什么都没有。

显然,部署中的Django需要指向127.0.0.1,它是'localhost'的IP表示。如果我使用我的内部IP地址,Django加载程序的静态文件将不接受它。

我要感谢@FlipperPA,他指出了我曾经错过的其他错误。谢谢。

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

© www.soinside.com 2019 - 2024. All rights reserved.