You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 06:53:18