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 2.2静态/媒体文件未显示/处理_Python_Django - Fatal编程技术网

Python Django 2.2静态/媒体文件未显示/处理

Python Django 2.2静态/媒体文件未显示/处理,python,django,Python,Django,我正在尝试部署我的Django讲师(Udemy)“房地产”项目 在我的VPS上,我运行的是Ubuntu 18.04、Python 3.6.8和Django 2.2.4 我遵循Brad的指南部署Django。我有点让它运行,但静态文件(CSS、JS和图像)没有得到服务。这是我的配置问题,我不清楚我做错了什么,或者我到底错过了什么 以下是最终结果的样子: 下面是我的实际情况: 在我的settings.py中探索其他问题和答案,我尝试使用join方法将不同的路径交换到STATIC\u ROOT、M

我正在尝试部署我的Django讲师(Udemy)“房地产”项目

在我的VPS上,我运行的是Ubuntu 18.04、Python 3.6.8和Django 2.2.4

我遵循Brad的指南部署Django。我有点让它运行,但静态文件(CSS、JS和图像)没有得到服务。这是我的配置问题,我不清楚我做错了什么,或者我到底错过了什么

以下是最终结果的样子:

下面是我的实际情况:

在我的settings.py中探索其他问题和答案,我尝试使用join方法将不同的路径交换到STATIC\u ROOT、MEDIA\u ROOT、STATICFILES\u DIRS。我还尝试将许多不同的列表项添加到urls.py中的urlpatterns变量中。尝试每个新的潜在更改后,我输入
python manage.py
,然后运行服务器。有时会有一个跟踪阻止服务器运行。在这些情况下,我只是将更改回滚到一个已知有效的设置,或者,我只是尝试了完全其他的方法,使服务器能够运行而无需追溯

根据@IrrupTor的回答,在本地运行此项目时,静态文件和媒体文件可以完美解析。因此,这确认了VPS上的远程配置中存在的问题。我还可以提供哪些其他信息来更好地澄清为什么我的VPS上没有加载静态文件和媒体文件

以下是我已经使用过的其他一些问题:

以下是Django shell中的输出:

python manage.py runserver 0.0.0.0:8000
Performing system checks...

System check identified no issues (0 silenced).
September 14, 2019 - 00:44:11
Django version 2.2.4, using settings 'btre.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
[14/Sep/2019 00:44:15] "GET / HTTP/1.1" 200 13775
[14/Sep/2019 00:44:15] "GET /static/css/bootstrap.css HTTP/1.1" 404 77
[14/Sep/2019 00:44:15] "GET /static/css/all.css HTTP/1.1" 404 77
[14/Sep/2019 00:44:15] "GET /static/css/style.css HTTP/1.1" 404 77
[14/Sep/2019 00:44:15] "GET /static/css/lightbox.min.css HTTP/1.1" 404 77
[14/Sep/2019 00:44:15] "GET /static/js/jquery-3.3.1.min.js HTTP/1.1" 404 77
[14/Sep/2019 00:44:15] "GET /static/img/logo.png HTTP/1.1" 404 77
[14/Sep/2019 00:44:15] "GET /static/js/lightbox.min.js HTTP/1.1" 404 77
[14/Sep/2019 00:44:15] "GET /static/js/bootstrap.bundle.min.js HTTP/1.1" 404 77
[14/Sep/2019 00:44:15] "GET /static/js/main.js HTTP/1.1" 404 77
[14/Sep/2019 00:44:15] "GET /static/js/lightbox.min.js HTTP/1.1" 404 77
[14/Sep/2019 00:44:15] "GET /static/js/main.js HTTP/1.1" 404 77
这是我的URL.py:

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('', include('pages.urls')),
    path('listings/', include('listings.urls')),
    path('accounts/', include('accounts.urls')),
    path('contacts/', include('contacts.urls')),
    path('admin/', admin.site.urls),

] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
以下是my settings.py中的相关行:

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/

STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "static")

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'btre/static')
]

# Media Folder Settings
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
这是我的文件树:


最后一点注意:现在我正在VPS上使用Django的测试服务器。我意识到这不是最佳做法,因为它不安全。我只是将Django的内置服务器作为垫脚石进行部署。加载静态和媒体文件后,我将立即切换到nginx和gunicorn,如原始指南中所述。

我试图重现您的错误:

它在settings.py配置下运行良好

但是当我在url.py中添加静态url配置时,我也收到了404错误

我建议将URL.py修改为以下内容:

from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('', include('pages.urls')),
    path('listings/', include('listings.urls')),
    path('accounts/', include('accounts.urls')),
    path('contacts/', include('contacts.urls')),
    path('admin/', admin.site.urls),

]
我把一切都弄明白了

在原始配置的settings.py底部,我尝试使用以下内容导入单独的生产设置:

try:
    from .local_settings import *
except ImportError:
    pass
注意
本地\u设置之前的时间段
。这将引用同一目录中的隐藏.local_settings.py文件。在我的实际配置中,我的生产设置文件实际上并没有隐藏。我的生产设置只是作为local_settings.py存在于项目目录中。实际上没有加句号前缀。考虑到我的生产设置没有被正确引用,这就是我的问题

我真的应该在我的原始问题中包含我的生产设置配置文件的详细信息。我不知道我怎么会错过这个

我的生产
DEBUG
变量设置设置为
False
,但当我尝试运行服务器时,我的Django live环境仍在我的web浏览器中显示调试信息。所以这本应该让我明白,但我错过了上周末,当我第一次组装这个堆栈溢出问题时

现在,我让服务器运行并正确解析静态文件和媒体文件,但对我的原始设置.py进行了更改。所以我仍然没有正确地调用local_settings.py。稍后我将写一个关于如何正确调用生产设置的单独问题

以下是我对现在适用于我的主
设置.py
所做的临时更改:

  • 允许的\u主机包括我的服务器的IP地址
  • MyDatabases dictionary指的是基本的测试SQLite配置,而不是更高级的PostgreSQL
  • 我没有将STATIC_ROOT设置为
    os.path.join(BASE_DIR,'STATIC')
    ,而是将其设置为
    os.path.join(os.path.dirname(BASE_DIR),“STATIC”)

  • 我还更改了后面的urlpatterns静态函数调用,以包括以下内容:
    +静态(settings.static\u URL,document\u root=settings.static\u root)+静态(settings.MEDIA\u URL,document\u root=settings.MEDIA\u root)
    。然而,无论我是在这行中注释还是注释,服务器似乎都会继续解析静态文件和媒体文件而不会出现问题。

    不,.local\u设置并不意味着你需要一个“.local\u settings.py”文件。

    我通常只会将静态文件放在我网站的根目录中,这样你就可以在{url}访问它们/static/js/thingy.jsHi IrrupTor!谢谢你的建议。在我的远程服务器上,我尝试删除静态url函数调用,但问题仍然存在于urls.py中。不同之处可能是我的远程服务器上有其他设置或线路导致了问题。您正在本地机器上测试,对吗?不幸的是,我无法在本地进行测试,因为Manjaro上的软件包维护人员为我们所有用户提供了“borked”pip,所以我今天无法构建我的venv。我将在几天内尝试本地测试,希望在我的O/S修复了pip之后。我将尽快在这里报告。我今天在本地成功地使用pip构建了Django。我可以确认此项目在本地运行良好,无论是否有
    +静态(settings.MEDIA\u URL,document\u root=settings.MEDIA\u root)
    包含在URL.py的底部。我的问题是远程服务器上的配置。为了更好地诊断和缩小VPS上的问题范围,我可以在原始问题中提供哪些其他信息?请在回答中添加一些细节。仅仅说明它不是关于什么,是没有帮助的。