升级Django(1.11)与Django-cms(3.5.0)后页面消失求助
针对Django-CMS升级后页面消失及snippets插件缺失的排查方案
先理清楚你的核心情况:顺利完成了Django 1.4 → 1.11、Python 2.5 → 3.5、Django-CMS 2.4 → 3.5的跨版本大升级,全新数据库迁移全程无冲突,本地调试时却遇到后台页面全消失、仅snippets插件缺失,其余功能正常的问题。下面是针对性的排查和解决思路:
一、页面消失问题的排查方向
- 数据库迁移是否覆盖CMS核心模块:虽然你用了全新数据库,但要确认是否执行了Django-CMS专属的迁移命令。3.x版本的迁移结构和2.x差异极大,务必确保运行过:
另外可以检查python manage.py migrate cms python manage.py migrate menus python manage.py migrate sekizaidjango_content_type表,确认CMS相关模型的记录是否正确生成——这是后台识别页面的核心依据。 - CMS配置项是否适配3.x要求:Django-CMS 3.x对
settings.py的配置有不少改动,重点检查:INSTALLED_APPS是否包含cms、menus、sekizai、treebeard这些核心依赖(3.x新增了treebeard作为树形结构支持)CMS_TEMPLATES配置的模板是否包含CMS要求的占位符标签,旧模板如果没更新,可能导致页面无法渲染和在后台显示CMS_PERMISSION的设置是否合理,如果开启了权限但当前用户没有页面查看权限,也会导致页面列表为空
- 是否遗漏页面数据迁移/初始化:全新数据库默认没有页面数据,如果你是打算从旧数据库迁移内容,要确认是否完成了数据导入。可以尝试用
dumpdata从旧版本导出CMS相关数据,再用loaddata导入新数据库(注意处理Python2到Python3的编码问题,以及模型字段的变更)
二、snippets插件缺失的解决方法
- 插件注册方式是否适配3.x:Django-CMS 3.x废弃了2.x的
cms.plugin_pool注册方法,需要改用@plugin_pool.register_plugin装饰器。检查snippets插件的代码是否更新为:from cms.plugin_pool import plugin_pool from cms.plugin_base import CMSPluginBase from .models import SnippetModel @plugin_pool.register_plugin class SnippetPlugin(CMSPluginBase): model = SnippetModel name = "Snippet" render_template = "snippets/plugin.html" - 插件是否兼容3.5版本:如果是第三方snippets插件,确认是否有针对Django-CMS 3.5的兼容版本,可能需要升级插件或自行修改代码适配
- 插件自身的迁移是否执行:如果snippets插件有自定义模型,需要执行它的迁移命令:
python manage.py migrate snippets(替换为实际的插件app名称)
三、额外调试建议
- 查看Django的日志文件,后台页面消失的问题可能有报错被隐藏,日志里的错误堆栈能帮你快速定位核心问题
- 尝试创建一个新的测试页面,如果能正常创建并显示,说明问题出在旧数据迁移环节;如果创建后仍不显示,大概率是配置或模板的问题
内容的提问来源于stack exchange,提问作者Vapourisation
相关产品推荐
相关产品推荐

