【问题标题】:Django-cms admin url 404 after language change语言更改后的Django-cms admin url 404
【发布时间】:2023-03-08 05:10:01
【问题描述】:

我最近开始学习 DjangoDjango CMS,并试图将我的网站语言从 English 更改为 Dutch,我使用

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,
        'public': True,
        'hide_untranslated': False,
    },
}

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

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.0 & Django==3.1.8

【问题讨论】:

    标签: python django django-cms


    【解决方案1】:

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

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

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

    所以 Django 尝试添加默认语言前缀 nl 并在您的情况下重定向到该 url 'nl/en/admin/cms/page/'。在这种情况下,路径不再与管理员路径匹配。


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

    from django.utils.translation import ugettext_lazy as _
    
    LANGUAGES = (
        ('nl', _('Nederlands')),
        ('en', _('English')),
    )

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

    【讨论】:

    • 我更改了我的 urls.py 以在其中包含 re_paths,但这仍然不能解决问题。我还尝试了您在答案中的include(admin.site.urls),但这使服务器崩溃,说不支持将 3 元组传递给 include()
    • @FullyHumanProgrammer,是的,我们不必将include() 用于admin.site.urls,它自Django 1.11 起已弃用。我没有在我的回答中立即注意到include()
    • @FullyHumanProgrammer,您在使用自定义模板吗?你能展示你的模板吗?
    • 模板是 Django 在您使用 djangocms 的自动设置时生成的,我还没有更改项目中的任何内容,除了语言和从管理页面返回的页面设置为英文
    • @FullyHumanProgrammer,我编辑了我的答案。 Django CMS 可以在与您相同的设置下正常工作。尝试删除i18n_patterns()
    猜你喜欢
    • 2012-06-25
    • 2015-04-26
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多