首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在root的子文件夹中使用Django项目和静态文件

在root的子文件夹中使用Django项目和静态文件
EN

Stack Overflow用户
提问于 2017-01-31 18:45:04
回答 1查看 1.2K关注 0票数 1

最近,我向我的DigitalOcean液滴部署了一个Django项目。我需要在根的子文件夹(即www.domainname.com/)中访问它。到目前为止,这使用了apache配置文件中的WSGI别名。不过,我在处理静态js文件时遇到了问题。

我使用模板中的{%静态%}标记来执行此操作。但是,当我在浏览器中检查js文件时,它们似乎总是被当前页面的html所取代。下面是我在settings.py中的静态相关设置:

代码语言:javascript
复制
STATIC_URL = '/static/'
STATIC_ROOT = '/var/www/html/<project name>/static'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "/static"),
]

更新1

下面是我的apache配置:

在网站中-可用/默认:

代码语言:javascript
复制
<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中:

代码语言:javascript
复制
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文件似乎正在被请求,即

代码语言:javascript
复制
<domain name>.com/<project name>/<app name>/<page>/<project name>/static/js/<js file name>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-31 20:14:49

在Apache配置中需要一个指令,以便为静态文件提供服务。

与在服务之前通过Django视图呈现的模板不同,静态文件通常由web服务器(或某些单独的服务)直接提供,以提高性能。毕竟,通常只需要文件本身,所以Django所需的开销是不必要的。在Django的文档这里中对此进行了讨论。

如果没有Alias指令,请求将传递给Django进行处理。Django将Apache的默认行为从直接从DocumentRoot提供文件更改为将URL映射到视图,然后构造响应。因此,根据您的urls.py安排,静态文件请求可能导致来自匹配视图的404页或响应(您正在看到的HTML )。

要解决这个问题,您可以添加

代码语言:javascript
复制
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>不是这些,所以虚拟主机与任何东西都不匹配,也不应用其中的配置。我建议通过改变

代码语言:javascript
复制
<VirtualHost <project name>:8000>

代码语言:javascript
复制
<VirtualHost *:8000>

它将与请求所期望的任何主机匹配。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41965194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档