Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在根目录的子文件夹中使用Django项目和静态文件_Python_Django_Django Staticfiles - Fatal编程技术网

Python 在根目录的子文件夹中使用Django项目和静态文件

Python 在根目录的子文件夹中使用Django项目和静态文件,python,django,django-staticfiles,Python,Django,Django Staticfiles,我最近在我的DigitalOcean Droplet上部署了一个Django项目。我需要在root(即www.domainname.com/)的子文件夹中访问它。到目前为止,这可以在apache配置文件中使用WSGI别名。不过,我在提供静态js文件时遇到了问题 我正在模板中使用{%static%}标记来完成这项工作。然而,当我在浏览器中检查js文件时,它们似乎总是被当前页面的html替换。以下是我在settings.py中的静态相关设置: STATIC_URL = '/static/' STAT

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

我正在模板中使用{%static%}标记来完成这项工作。然而,当我在浏览器中检查js文件时,它们似乎总是被当前页面的html替换。以下是我在settings.py中的静态相关设置:

STATIC_URL = '/static/'
STATIC_ROOT = '/var/www/html/<project name>/static'

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "/static"),
]
STATIC\u URL='/STATIC/'
STATIC_ROOT='/var/www/html//STATIC'
静态文件\u目录=[
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>

选项索引跟随符号链接多视图
允许超越所有
命令允许,拒绝
通融
服务器名
服务器别名/
服务器管理员
DocumentRoot/var/www/html/
WSGIScriptAlias///var/www/html///wsgi.py
ErrorLog/var/www/html/logs/error.log
CustomLog/var/www/html/logs/custom.log组合
WSGIPythonPath/var/www/html/
在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>
WSGIScriptAlias//var/www/html///wsgi.py
WSGIPythonPath/var/www/html/
要求所有授权
更新2

似乎是通过将静态路径附加到当前页面的路径来请求.js文件,即

<domain name>.com/<project name>/<app name>/<page>/<project name>/static/js/<js file name>
.com///static/js/
您需要在Apache配置中添加一个,以便为静态文件提供服务

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

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

要解决此问题,可以添加

Alias /static/ /var/www/html/<project name>/static/



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

您需要显示您的Apache配置。@DanielRoseman已更新。恐怕在将该行添加到虚拟主机配置后,我仍然遇到相同的问题。我可以从Chrome中查看文件的链接位置,并且可以看到静态路径被附加到当前页面。我将相应地更新我的问题。有三种方法可以链接url,每种方法都有不同的效果。第一个(example.com/static/)路由到指定的url,第二个有一个前导斜杠(/static/)并路由到相对于当前域的指定url,第三个没有前导斜杠(static/),它路由到附加了指定url的当前url。那么,您如何链接该文件?它应该只有
src=“{%static'js/myscript.js%}”
,但是您的url似乎有
的前缀。要明确的是,现在的问题只有一半。即使添加前导斜杠
//static/js/myscript.js
也不会指向正确的资源,因为Apache正在使用别名
/static/
。如果您想在静态文件URL中的
static
之前使用
,则别名必须是
别名//static//var/…
。我已将别名更改为//static/,并重新启动apache服务器,但现在我刚刚收到一个404错误。它现在似乎是从.com/static/jsfile.js而不是.com//static/jsfile.js请求js文件。我的源代码只是
{%static'js/jquery-2.1.4.min.js%}
<VirtualHost <project name>:8000>
<VirtualHost *:8000>