语言更改后 Django-cms admin url 404

问题描述

我最近开始学习 DjangoDjango CMS,并试图将我网站的语言从英语更改为荷兰语,我迁移了在我的页面上使用

Page.objects.filter(languages='en').update(languages='nl')
Title.objects.filter(language='en').update(language='nl')
CMSPlugin.objects.filter(language='en').update(language='nl')

在我的 settings.py 中,我还将 LANGUAGE_CODE 更改为 'nl' 并将我的语言和 CMS 语言设置如下

LANGUAGES = (
    ## Customize this
    ('nl','Nederlands'),)

CMS_LANGUAGES = {
    ## Customize this
    1: [
        {
            'code': 'nl','name': 'Nederlands','redirect_on_fallback': True,'public': True,'hide_untranslated': False,},],'default': {
        'redirect_on_fallback': True,}

这对于普通页面来说就像一个魅力,但是一旦我尝试打开管理界面,我就会收到以下错误

Request Method: GET
Request URL:    http://localhost:8000/nl/en/admin/cms/page/?language=en
Raised by:  cms.views.details
Using the URLconf defined in PinManagementSite.urls,Django tried these URL patterns,in this order:

sitemap.xml
nl/ admin/
nl/ ^cms_login/$ [name='cms_login']
nl/ ^cms_wizard/
nl/ ^(?P<slug>[0-9A-Za-z-_.//]+)/$ [name='pages-details-by-slug']
nl/ ^$ [name='pages-root']
^media/(?P<path>.*)$
^static/(?P<path>.*)$
The current path,/nl/en/admin/cms/page/,didn't match any of these.

据我所知,我的配置都正确,但是当我进入管理页面时,它试图通过 /nl/en 而不是 /nl/ 路由我,我不知道为什么.

为了完整起见,我将在下面添加我的 urls.py

from cms.sitemaps import CMSSitemap
from django.conf import settings
from django.conf.urls.i18n import i18n_patterns
from django.conf.urls.static import static
from django.contrib import admin
from django.contrib.sitemaps.views import sitemap
from django.urls import include,path

admin.autodiscover()

urlpatterns = [
    path("sitemap.xml",sitemap,{"sitemaps": {"cmspages": CMSSitemap}}),]


urlpatterns += i18n_patterns(
    path("admin/",admin.site.urls),path("",include("cms.urls")),)

# This is only needed when using runserver.
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
    urlpatterns += static(settings.STATIC_URL,document_root=settings.STATIC_ROOT)

版本为 djangocms==3.8.0Django==3.1.8

解决方法

您只使用一种语言,所以不要使用 i18n_patterns()

urlpatterns += [
    path(r'^admin/',admin.site.urls),path(r'^',include('cms.urls')),]

您正在尝试访问“/en/admin/cms/page/”,但语言en未添加到您的LANGUAGES .

因此,Django 尝试添加默认语言前缀 nl 并在您的案例“nl/en/admin/cms/page/”中重定向到该网址。在这种情况下,路径不再与管理路径匹配。


您也可以尝试在 LANGUAGES 中添加英语:

from django.utils.translation import ugettext_lazy as _

LANGUAGES = (
    ('nl',_('Nederlands')),('en',_('English')),)

我试过你的设置。 Django CMS 可以在与您相同的设置下正常工作。确保页面没有被缓存。