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

开启CMS_Permission登录要求后出现页面未找到(404)错误的解决方法

问题描述

为网站页面设置密码保护,已在settings.py中设置CMS_PERMISSION = True,并在页面权限中勾选“login required”,但访问该页面时出现404错误,请求URL为http://localhost:8000/en/accounts/login/?next=/en/private/,提示路径/en/accounts/login/不匹配任何URL规则。

错误信息

Page not found (404)
Request Method: GET
Request URL:    http://localhost:8000/en/accounts/login/?next=/en/private/
Raised by:  cms.views.details
Using the URLconf defined in backend.urls, Django tried these URL patterns, in this order:
en/ ^jsi18n/$ [name='javascript-catalog']
^static/(?P<path>.*)$
en/ ^admin/
en/ ^ ^blog-content/\Z [name='posts-latest']
en/ ^ ^blog-content/feed/\Z [name='posts-latest-feed']
en/ ^ ^blog-content/feed/fb/\Z [name='posts-latest-feed-fb']
en/ ^ ^blog-content/(?P<year>[0-9]+)/\Z [name='posts-archive']
en/ ^ ^blog-content/(?P<year>[0-9]+)/(?P<month>[0-9]+)/\Z [name='posts-archive']
en/ ^ ^blog-content/author/(?P<username>[^/]+)/\Z [name='posts-author']
en/ ^ ^blog-content/category/(?P<category>[^/]+)/\Z [name='posts-category']
en/ ^ ^blog-content/tag/(?P<tag>[-a-zA-Z0-9_]+)/\Z [name='posts-tagged']
en/ ^ ^blog-content/tag/(?P<tag>[-a-zA-Z0-9_]+)/feed/\Z [name='posts-tagged-feed']
en/ ^ ^blog-content/(?P<year>[0-9]+)/(?P<month>[0-9]+)/(?P<day>[0-9]+)/(?P<slug>[^/]+)/\Z [name='post-detail']
en/ ^ ^blog-content/(?P<year>[0-9]+)/(?P<month>[0-9]+)/(?P<slug>[^/]+)/\Z [name='post-detail']
en/ ^ ^blog-content/(?P<category>[^/]+)/(?P<slug>[^/]+)/\Z [name='post-detail']
en/ ^ ^blog-content/(?P<slug>[^/]+)/\Z [name='post-detail']
en/ ^ ^cms_login/$ [name='cms_login']
en/ ^ ^cms_wizard/
en/ ^ ^(?P<slug>[0-9A-Za-z-_.//]+)/$ [name='pages-details-by-slug']
en/ ^ ^$ [name='pages-root']
en/ ^sitemap\.xml$
en/ ^taggit_autosuggest/
en/ ^filer/
en/ ^accounts/ login/ [name='login']
en/ ^accounts/ logout/ [name='logout']
en/ ^accounts/ password_change/ [name='password_change']
en/ ^accounts/ password_change/done/ [name='password_change_done']
en/ ^accounts/ password_reset/ [name='password_reset']
en/ ^accounts/ password_reset/done/ [name='password_reset_done']
en/ ^accounts/ reset/<uidb64>/<token>/ [name='password_reset_confirm']
en/ ^accounts/ reset/done/ [name='password_reset_complete']
The current path, /en/accounts/login/, didn’t match any of these.

当前urls.py代码

from django.conf.urls.i18n import i18n_patterns
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.urls import include, re_path, path
from django.views.i18n import JavaScriptCatalog
from django.contrib.sitemaps.views import sitemap
from cms.sitemaps import CMSSitemap
from djangocms_blog.sitemaps import BlogSitemap

urlpatterns = i18n_patterns(
    re_path(r'^jsi18n/$', JavaScriptCatalog.as_view(), name='javascript-catalog'),
)

urlpatterns += staticfiles_urlpatterns()

urlpatterns += i18n_patterns(
    re_path(r'^admin/', admin.site.urls),
    re_path(r'^', include('cms.urls')),
    re_path(r'^sitemap\.xml$', sitemap, {'sitemaps': {'cmspages': CMSSitemap, 'blog': BlogSitemap,}}),
    re_path(r'^taggit_autosuggest/', include('taggit_autosuggest.urls')),
    re_path(r'^filer/', include('filer.urls')),
    re_path(r'^accounts/', include('django.contrib.auth.urls')),
    )

admin.site.enable_nav_sidebar = False

解决方案

问题出在URL匹配顺序上:cms.urls的通用匹配规则re_path(r'^', include('cms.urls'))会在匹配到/en/accounts/login/之前就拦截所有请求,导致accounts相关的URL规则无法被触发。

调整urls.py中i18n_patterns里的URL顺序,把accounts的规则放在cms.urls之前:

urlpatterns += i18n_patterns(
    re_path(r'^admin/', admin.site.urls),
    re_path(r'^accounts/', include('django.contrib.auth.urls')),  # 移到cms.urls前面
    re_path(r'^', include('cms.urls')),
    re_path(r'^sitemap\.xml$', sitemap, {'sitemaps': {'cmspages': CMSSitemap, 'blog': BlogSitemap,}}),
    re_path(r'^taggit_autosuggest/', include('taggit_autosuggest.urls')),
    re_path(r'^filer/', include('filer.urls')),
    )

这样Django会优先匹配accounts相关的URL,再交给CMS处理其他路径,就能正常跳转到登录页面了。

内容的提问来源于stack exchange,提问作者user16573292

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:36:25