语言更改后 Django-cms admin url 404
Django-cms admin url 404 after language change
我最近开始学习 Django
和 Django 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
您只使用一种语言,所以不要使用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 使用与您相同的设置可以正常工作。确保页面未被缓存。
我最近开始学习 Django
和 Django 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
您只使用一种语言,所以不要使用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 使用与您相同的设置可以正常工作。确保页面未被缓存。