django - Django“dockerized”(开发环境)中未提供静态文件
问题描述
编辑
- my_project
|_app
|_core
|_wsqi.py
|_settings
|_base.py <-- settings.py used for development
|_dev.py
|_prod.py
|_urls.py <-- modifications
|_requirements
|_base.txt
|_dev.txt
|_prod.txt
|_Dockerfile
|_Dockerfile.prod
|_entrypoint.sh
|_entrypoint.prod.sh
|_manage.py
|_.dockerignore
|_nginx
|_.env.dev
|_.env.prod
|_.gitignore
|_docker-compose.yml
|_docker-compose.prod.yml
# from django.conf import settings
import core
from django.conf.urls.static import static
urlpatterns = [
path('', views.home, name='home'),
path('registration/', include('django.contrib.auth.urls')),
path('randomization_management/', include('randomization_management.urls')),
path('randomization_settings/', include('randomization_settings.urls')),
path('randomization/', include('randomization.urls')),
path('export/', include('export.urls')),
path('contact/', views.contact, name='contact'),
path('admin/', admin.site.urls),
] + static(core.settings.dev.STATIC_URL, document_root=core.settings.dev.STATIC_ROOT)
我尝试“dockerize”一个 Django 应用程序。
除了未提供的静态文件外,一切正常。我使用 Django Web 服务器(开发),所以我不必“提供”静态文件。
尽管如此,我运行docker exec -it coverage_africa_web_1 python manage.py collectstatic
命令
并得到确认
您已请求在设置中指定的目标位置收集静态文件:
/usr/src/app/static
这将覆盖现有文件!你确定要这么做吗?
输入“yes”继续,或输入“no”取消:yes 找到另一个目标路径为“randomization/js/script.js”的文件。它将被忽略,因为只收集第一个遇到的文件。如果这不是您想要的,请确保每个静态文件都有唯一的路径。
140 个静态文件复制到“/usr/src/app/static”。
设置.base.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static")
STATICFILES_DIRS = (
os.path.join(BASE_DIR,'randomization_management/static'),
os.path.join(BASE_DIR,'randomization_settings/static'),
os.path.join(BASE_DIR,'randomization/static'),
)
MEDIA_URL = "/media/"
MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')
.env.dev
SECRET_KEY=*************************************
DEBUG=1
DJANGO_ALLOWED_HOSTS=localhost 127.0.0.1 [::1]
SQL_ENGINE=django.db.backends.postgresql
SQL_DATABASE=db_dev
SQL_USER=user
SQL_PASSWORD=user
SQL_HOST=db
SQL_PORT=5432
DATABASE=postgres
DJANGO_SETTINGS_MODULE=core.settings.dev
码头工人-compose.yml
version: '3.7'
services:
web:
build: ./app
restart: always
command: python manage.py runserver 0.0.0.0:8000
volumes:
- ./app/:/usr/src/app
ports:
- 8000:8000
env_file:
- ./.env.dev
depends_on:
- db
db:
image: postgres:12.0-alpine
restart: always
volumes:
- postgres_data:/var/lib/postgres/data/
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=user
- POSTGRES_DB=db_dev
volumes:
postgres_data:
解决方案
我看到您不使用 Web 服务器来提供静态文件,因此请确保 Django 正在提供静态文件。
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
查看 Django 文档https://docs.djangoproject.com/en/3.1/howto/static-files/#serving-static-files-during-development
推荐阅读
- java - Cassandra 性能对于两个应用程序主机是不同的
- python - OR-Tools 和 Python 中的 NoCycle 约束
- clojure - 将集合指定为每个值中的一个
- apache-poi - 使用“Row.MissingCellPolicy.RETURN_BLANK_AS_NULL”时在行中出现红色下划线错误
- google-ads-api - 请求 google Ads Api 时如何解决 DEVELOPER_TOKEN_PROHIBITED 错误?
- scala - Scalatest - 如何在运行时创建并行测试
- unity3d - Unity 3d 中的离屏指示器
- laravel - 如何在 laravel 应用程序中为单个 vue 组件实现 SSR?
- yaml - Swagger / Open API 3 - JSON 响应对象中的可选字段(/属性)
- php - 如何通过php从动态地址中获取经纬度