python - Django 2.2 静态/媒体文件未显示/处理
问题描述
我正在尝试部署我的 Django 讲师 (Udemy) 的“房地产”项目。这是 Brad Traversy 的要点。
在我的 VPS 上,我运行的是 Ubuntu 18.04、Python 3.6.8 和 Django 2.2.4。
我遵循了 Brad 的 Django 部署指南。我有点让它运行,但没有提供静态文件(CSS、JS 和图像)。这是我的配置的一个问题,我不清楚我在这里做错了什么或者我到底错过了什么。
以下是最终结果的样子:
这是我的实际样子:
探索关于 SO 的其他问题和答案,在我的 settings.py 中,我尝试使用 join 方法将不同的路径换入(和换出)到 STATIC_ROOT、MEDIA_ROOT、STATICFILES_DIRS。我还尝试将许多不同的列表项添加到 urls.py 中的 urlpatterns 变量中。在尝试每个新的潜在变化后,我输入python manage.py collectstatic
然后运行服务器。有时会有追溯阻止服务器运行。在这些情况下,我只是将更改回滚到已知可以工作的设置,或者,我只是完全尝试了其他方法,这将使服务器能够在没有回溯的情况下运行。
根据@IrrupTor 的回答,在本地运行这个项目时,静态和媒体文件完美解析。因此,这证实了我的 VPS 上的远程配置中存在问题。我还可以提供哪些其他信息来更好地阐明为什么我的 VPS 上没有加载静态和媒体文件?
以下是我已经使用过的关于 SO 的其他一些问题:
这是我的 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
这是我的 urls.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)
以下是我的 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 配置运行良好,
但是当我在 urls.py 中添加静态 url 配置时,我也收到了 404 错误。
我建议将 urls.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),
]
推荐阅读
- javascript - 在单独的窗口中渲染 Monaco 编辑器
- python - 提交表单而不刷新页面
- php - 如何从复杂的 php 对象中获取特定变量?
- reactjs - 如何在 React JS 中加载 SVG 列表
- python - 如何将opencv中处理的帧发送到另一个本地系统
- swift - UIDatePicker 倒计时计时器模式在 Xcode 10.3 中不返回正确的时间
- php - 在while循环中输入PHP
- ormlite-servicestack - 连接表列上的 ServiceStack OrmLite OrderBy
- c# - 修补子实体的属性。如何正确映射实体以执行补丁方法
- android - 制作 OpenCV 源代码。错误日志:/bin/sh:./gradlew:没有这样的文件或目录