“Django中未提供静态文件”;dockerized";(发展环境)
编辑“Django中未提供静态文件”;dockerized";(发展环境),django,docker-compose,static,Django,Docker Compose,Static,编辑 我尝试将Django应用程序“dockerize” 除未提供的静态文件外,所有文件都可以正常工作。 我使用Django web服务器(dev),因此不必“服务”静态文件 version: '3.7' services: web: build: ./app restart: always command: python manage.py runserver 0.0.0.0:8000 volumes:
我尝试将Django应用程序“dockerize” 除未提供的静态文件外,所有文件都可以正常工作。 我使用Django web服务器(dev),因此不必“服务”静态文件
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:
无论如何,我运行docker exec-it coverage\u africa\u web\u 1 python manage.py collectstatic
命令
并得到确认
您已请求在目标位置收集静态文件
设置中指定的位置:
# 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)
这将覆盖现有文件!
你确定要这样做吗
键入“是”继续,或键入“否”取消:是
找到另一个目标路径为“randomization/js/script.js”的文件。它将被忽略,因为只收集第一个遇到的文件。如果这不是您想要的,请确保每个静态文件都有唯一的路径
140个静态文件复制到“/usr/src/app/static”
settings.base.py
/usr/src/app/static
环境发展局局长
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/')
docker-compose.yml
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
我发现您没有使用web服务器来服务静态文件,所以请确保Django正在服务静态文件
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:
查看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)
STATIC\u URL='/STATIC/'
#STATIC\u ROOT=os.path.join(BASE\u DIR,“STATIC”)感谢您的回复。当我使用Django runserver时,它应该“单独”服务;我已经用架构项目更新了我的帖子,并按照建议修改了我的URL.py文件,但没有更改。。。
STATIC_URL = '/static/'
# STATIC_ROOT = os.path.join(BASE_DIR, "static") <- removed in dev
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"), <- added in dev
os.path.join(BASE_DIR,'randomization_management/static'),
os.path.join(BASE_DIR,'randomization_settings/static'),
os.path.join(BASE_DIR,'randomization/static'),
)