【萌新扫盲】Django 静态文件 404 的一些解决方案。

作者:底层群员-吴彦祖Pro 737 浏览 1 评论 发布时间:2021-05-13 15:58:12

django在settings里面已经有写好了注释,这里就是标准答案

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/zh-hans/3.2/howto/static-files/

我这里再注点水

开发阶段

项目在开发阶段:DEBUG=True 使用的配置:

STATIC_URL = '/static/'

# 使用pathlib
STATICFILES_DIRS = [BASE_DIR / 'static', ]

# 使用os.path
# STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'), ]

项目上线

项目上线后: DEBUG=False Django在这时候不会提供静态文件的支持了,所以你的静态文件会报404错误。 毕竟django不是什么高性能框架, 更推荐使用其他的服务器托管静态文件, 先配置好settings.py

STATIC_URL = '/static/'
STATIC_ROOT = BASE_DIR / 'static'

# 注释STATICFILES_DIRS
# STATICFILES_DIRS = [BASE_DIR / 'static', ]

# 配置simpleui静态文件离线模式 不填该项或者为False的时候,默认从第三方的cdn获取
SIMPLEUI_STATIC_OFFLINE = True

在到控制台输入 python manage.py collectstatic 把静态文件克隆到本地

临时方案 修改urls.py (不推荐,影响服务器性能)

from django.conf import settings  # 新增
from django.conf.urls import url  # 新增
from django.views import static  # 新增
from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^static/(?P<path>.*)$', static.serve,
        {'document_root': settings.STATIC_ROOT}, name='static'),
]

个人在使用的方案

以下解决方案是搭配uwsgi + nginx使用 (服务器是 centos7.x) 在nginx.conf里面设置个static的地址就行

server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html;
        include      /etc/nginx/default.d/*.conf;
        location / {
            include     uwsgi_params;
            # uwsgi运行的django项目 socket地址
            uwsgi_pass  127.0.0.1:8000;
        }
        # 这里是静态文件地址
        location /static {
            alias  /项目地址/static/;
        }
    }

上传文件也是同理,设置好MEDIA_URL MEDIA_ROOT,和static配置是一样的。 其他使用oss,七牛云等等直接搜索下就有相关文档了,配置很简单。

Loading...
评论列表 1条评论
社区小助手
2021-05-21 15:55:57