添加Django CMS至现有项目时,ToolbarMiddleware触发cms_usersettings_change路由匹配失败
在给现有Django 5.1.4项目添加Django CMS时,加载CMS起始页出现以下错误:
Reverse for 'cms_usersettings_change' not found. 'cms_usersettings_change' is not a valid view function or pattern name.
错误触发自site-packages/cms/templates/cms/welcome.html第14行的{% cms_toolbar %}标签。
已完成官方指南中的所有步骤,迁移执行正常,cms check未检测到问题。希望将CMS部署在/cms/路径下,当前urls.py配置如下:
urlpatterns = [ # ... 自定义应用的路径 ... path("cms/", include("cms.urls")), ]
禁用settings.py中的cms.middleware.toolbar.ToolbarMiddleware后,CMS起始页可正常显示,但工具栏失效。尝试过自定义ToolbarMiddleware及使用i18n_patterns,均无效果。
这个问题的核心是Django CMS工具栏依赖的部分核心URL未被正确配置,即便将CMS挂载在/cms/路径下,仍需满足一些基础路由要求:
确保认证URL已配置
Django CMS的用户设置功能依赖Django自带的认证模块,在项目根urls.py中添加认证路由:urlpatterns = [ # ... 其他自定义URL ... path("accounts/", include("django.contrib.auth.urls")), path("cms/", include("cms.urls")), ]补充根路径的CMS路由
不要仅将cms.urls挂载在/cms/下,需额外添加根路径的CMS路由(用于工具栏等核心功能的反向解析),修改urls.py:urlpatterns = [ # ... 自定义应用的路径 ... path("accounts/", include("django.contrib.auth.urls")), path("cms/", include("cms.urls")), path("", include("cms.urls")), # 新增该行 ]这不会影响你在
/cms/路径访问CMS,CMS路由会优先匹配带前缀的路径,同时能让工具栏找到所需的反向URL。检查INSTALLED_APPS配置
确认django.contrib.auth、django.contrib.sites已在INSTALLED_APPS中,这两个是Django CMS运行的基础依赖:INSTALLED_APPS = [ # ... 其他应用 ... 'django.contrib.auth', 'django.contrib.sites', 'cms', # ... CMS相关其他应用 ... ]清除缓存并重启服务
修改配置后,执行python manage.py clearcache,然后重启Django开发服务器,确保新的URL配置生效。
内容的提问来源于stack exchange,提问作者Timo

