最近,我向我的DigitalOcean液滴部署了一个Django项目。我需要在根的子文件夹(即www.domainname.com/)中访问它。到目前为止,这使用了apache配置文件中的WSGI别名。不过,我在处理静态js文件时遇到了问题。
我使用模板中的{%静态%}标记来执行此操作。但是,当我在浏览器中检查js文件时,它们似乎总是被当前页面的html所取代。下面是我在settings.py中的静态相关设置:
STATIC_URL = '/static/'
STATIC_ROOT = '/var/www/html/<project name>/static'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "/static"),
]更新1
下面是我的apache配置:
在网站中-可用/默认:
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>
<VirtualHost <project name>:8000>
ServerName <project name>
ServerAlias <domain>/<project name>
ServerAdmin <email>
DocumentRoot /var/www/html/<project name>
WSGIScriptAlias /<project name>/ /var/www/html/<project name>/<project name>/wsgi.py
ErrorLog /var/www/html/logs/error.log
CustomLog /var/www/html/logs/custom.log combined
WSGIPythonPath /var/www/html/<project name>
</VirtualHost>在apache2.conf中:
WSGIScriptAlias /<project name> /var/www/html/<project name>/<project name>/wsgi.py
WSGIPythonPath /var/www/html/<project name>
<Directory /var/www/html/<project name>>
<Files wsgi.py>
Require all granted
</Files>
</Directory>更新2
通过将静态路径附加到当前页的路径,.js文件似乎正在被请求,即
<domain name>.com/<project name>/<app name>/<page>/<project name>/static/js/<js file name>发布于 2017-01-31 20:14:49
在Apache配置中需要一个指令,以便为静态文件提供服务。
与在服务之前通过Django视图呈现的模板不同,静态文件通常由web服务器(或某些单独的服务)直接提供,以提高性能。毕竟,通常只需要文件本身,所以Django所需的开销是不必要的。在Django的文档这里中对此进行了讨论。
如果没有Alias指令,请求将传递给Django进行处理。Django将Apache的默认行为从直接从DocumentRoot提供文件更改为将URL映射到视图,然后构造响应。因此,根据您的urls.py安排,静态文件请求可能导致来自匹配视图的404页或响应(您正在看到的HTML )。
要解决这个问题,您可以添加
Alias /static/ /var/www/html/<project name>/static/到配置文件中的虚拟主机。这将告诉Apache在以/static/开头的URI上发出请求时,从静态目录中提供文件。
例如,/static/index.js的URI将导致Apache作为响应提供文件/var/www/html/<project name>/static/index.js。
此外,您的VirtualHost中有一个错误。您提供的地址是<project name>,它不是有效的选项(请看这里)。虚拟主机地址必须是IP地址、域名或通配符*。
因为<project name>不是这些,所以虚拟主机与任何东西都不匹配,也不应用其中的配置。我建议通过改变
<VirtualHost <project name>:8000>至
<VirtualHost *:8000>它将与请求所期望的任何主机匹配。
https://stackoverflow.com/questions/41965194
复制相似问题