Django 用户认证 用户 邮箱登录 邮箱注册 ORM or,and,not form.py FORM ModelForm Paginator 分页 HTMl JQuery 定位元素 ajax django切片 restfulapi 跨域 Ubantu Python Mysql Scrapy 爬虫 导出 Python读写 Pycharm 破解 session re sqlit3 生成式 其他 Prism 富文本 CSS Nginx 部署 请求头 抓包 协议 selenium Ubuntu 宝塔 AI Comfy-ui ollama dify open-webui Git docker
Django项目上线后无法加载xadmin等的静态文件问题(django的settings中几个static设置项的关系)
张建行 2018年5月24日 04:37 98 文章标签: Django

一、xadmin后台管理系统央视丢失?

django的生产环境不同开发环境,在生产环境下(DEBUG=False),django.contrib.staticfiles 是不起任何作用的,也就说 django.contrib.staticfiles 只对开发环境(DEBUG=True)开启。所以会导致xadmin样式丢失现象。

解决方案:

1.在settings.py中添加如下配置:

STATIC_ROOT = os.path.join(BASE_DIR, 'static')

2.修改主项目中的urls.py文件中添加如下语句:

urlpatterns = [url(r'^media/(?P<path>.*)$', serve, {'document_root': MEDIA_ROOT}),url(r'^static/(?P<path>.*)$', serve, {'document_root': STATIC_ROOT}),]+ static(MEDIA_ROOT, document_root=MEDIA_ROOT)

3.在控制台输入如下命令:
在这里插入图片描述
在这里插入图片描述
此时,Django的后台管理xadmin将会恢复样式。

二、静态文件和图片加载不出来?
1.在settings中分别配置static文件和图片的路径:

STATIC_URL = '/static/'# 该目录下面的文件会被当成静态文件进行处理 
# STATIC_ROOT 是在部署的时候才发挥作用
STATIC_ROOT = os.path.join(BASE_DIR,'static')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')

2.在TEMPLATES 中添加一个上下文环境 ‘django.template.context_processors.media’, 这个会自动的把MEDIA_URL 注册到前端的模板中的 没有这个上下文环境MEDIA_URL在前端是没有显示的:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                # 处理静态问题件
                'django.template.context_processors.media'
            ],
        },
    },
]
3.导入url模块
from django.conf.urls import url
from django.conf.urls.static import static
from django.views.static import serve
urlpatterns = [ 
    url(r'^media/(?P<path>.*)$', serve, {'document_root': MEDIA_ROOT}),
    url(r'^static/(?P<path>.*)$', serve, {'document_root': STATIC_ROOT}),
]+ static(MEDIA_ROOT, document_root=MEDIA_ROOT)
此时,静态文件和图片就可以加载出来了。