Wagtail Localize多语言URL异常:第二语言路径被追加默认语言前缀致404
Wagtail Localize 出现异常URL结构问题
访问http://127.0.0.1:8000可正常跳转至英文首页http://127.0.0.1:8000/en/,符合预期;但尝试访问中文路径http://127.0.0.1:8000/cn/时,英文locale前缀「en」会被自动追加至路径前,形成http://127.0.0.1:8000/en/cn/或http://127.0.0.1:8000/en/cn/about/这类错误路径。
即使手动修正为预期的http://127.0.0.1:8000/cn/about/,「en」仍会被自动追加,导致页面返回404错误,点击后台的「实时预览(live view)」也会出现同样问题。
错误信息
页面未找到 (404) 请求方法: GET 请求URL: http://127.0.0.1:8000/en/cn/ 触发位置: wagtail.views.serve 使用website.urls中定义的URLconf,Django按以下顺序尝试了这些URL模式: en/ django-admin/ en/ admin/ en/ documents/ en/ search/ [name='search'] en/ _util/authenticate_with_password/<int:page_view_restriction_id>/<int:page_id>/ [name='wagtailcore_authenticate_with_password'] en/ _util/login/ [name='wagtailcore_login'] en/ ^((?:[\w-]+/)*)$ [name='wagtail_serve'] 当前路径 en/cn/ 匹配了最后一个模式。
相关配置文件
urls.py
# 以下配置遵循官方文档 from django.conf import settings from django.urls import include, path from django.contrib import admin from django.conf.urls.i18n import i18n_patterns from wagtail.admin import urls as wagtailadmin_urls from wagtail import urls as wagtail_urls from wagtail.documents import urls as wagtaildocs_urls from search import views as search_views urlpatterns = [ path("django-admin/", admin.site.urls), path("admin/", include(wagtailadmin_urls)), path("documents/", include(wagtaildocs_urls)), ] urlpatterns += i18n_patterns( path('search/', search_views.search, name='search'), path("", include(wagtail_urls)), prefix_default_language=True, ) if settings.DEBUG: from django.conf.urls.static import static from django.contrib.staticfiles.urls import staticfiles_urlpatterns # 开发服务器提供静态文件和媒体文件 urlpatterns += staticfiles_urlpatterns() urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
base.py
# 应用定义 INSTALLED_APPS = [ "home", "menus", "resources", "courses", "contact", "schedule", "search", "wagtail_localize", "wagtail_localize.locales", "wagtail.contrib.forms", "wagtail.contrib.redirects", "wagtail.embeds", "wagtail.sites", "wagtail.users", "wagtail.snippets", "wagtail.documents", "wagtail.images", "wagtail.search", "wagtail.admin", "wagtail", "modelcluster", "taggit", "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", "django_extensions", ] MIDDLEWARE = [ "django.contrib.sessions.middleware.SessionMiddleware", "django.middleware.common.CommonMiddleware", "django.middleware.csrf.CsrfViewMiddleware", "django.contrib.auth.middleware.AuthenticationMiddleware", "django.contrib.messages.middleware.MessageMiddleware", "django.middleware.clickjacking.XFrameOptionsMiddleware", "django.middleware.security.SecurityMiddleware", # 检测用户浏览器语言并跳转到最合适的语言版本 "django.middleware.locale.LocaleMiddleware", "wagtail.contrib.redirects.middleware.RedirectMiddleware", ] ROOT_URLCONF = "website.urls" TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [ os.path.join(PROJECT_DIR, "templates"), ], "APP_DIRS": True, "OPTIONS": { "context_processors": [ "django.template.context_processors.debug", "django.template.context_processors.request", "django.contrib.auth.context_processors.auth", "django.contrib.messages.context_processors.messages", ], }, }, ] WSGI_APPLICATION = "website.wsgi.application" # 数据库 # https://docs.djangoproject.com/en/4.1/ref/settings/#databases DATABASES = { "default": { "ENGINE": "django.db.backends.sqlite3", "NAME": os.path.join(BASE_DIR, "db.sqlite3"), } } # 密码验证 # https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", }, { "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", }, { "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", }, { "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", }, ] # 国际化配置 # https://docs.djangoproject.com/en/4.1/topics/i18n/ LANGUAGE_CODE = "en" TIME_ZONE = "UTC" # 开启Django和Wagtail的国际化支持 USE_I18N = True # 按用户本地格式显示日期和数字 USE_L10N = True WAGTAIL_I18N_ENABLED = True USE_TZ = True WAGTAIL_CONTENT_LANGUAGES = LANGUAGES = [ ('en', "英语(英国)"), ('cn', "中文"), ] WAGTAILLOCALIZE_SYNC_LIVE_STATUS_ON_TRANSLATE = False # 静态文件(CSS、JavaScript、图片) # https://docs.djangoproject.com/en/4.1/howto/static-files/ STATICFILES_FINDERS = [ "django.contrib.staticfiles.finders.FileSystemFinder", "django.contrib.staticfiles.finders.AppDirectoriesFinder", ] STATICFILES_DIRS = [ os.path.join(PROJECT_DIR, "static"), ] # 生产环境推荐使用ManifestStaticFilesStorage,避免缓存中提供过时的JavaScript/CSS资源(例如Wagtail升级后) # 参考:https://docs.djangoproject.com/en/4.1/ref/contrib/staticfiles/#manifeststaticfilesstorage STATICFILES_STORAGE = "django.contrib.staticfiles.storage.ManifestStaticFilesStorage" STATIC_ROOT = os.path.join(BASE_DIR, "static") STATIC_URL = "/static/" MEDIA_ROOT = os.path.join(BASE_DIR, "media") MEDIA_URL = "/media/" # Wagtail配置 WAGTAIL_SITE_NAME = "website" # 搜索配置 # https://docs.wagtail.org/en/stable/topics/search/backends.html WAGTAILSEARCH_BACKENDS = { "default": { "BACKEND": "wagtail.search.backends.database", } } # Wagtail管理后台中用于引用完整URL的基础URL(例如通知邮件中) # 不要包含'/admin'或末尾斜杠 WAGTAILADMIN_BASE_URL = "http://example.com"
内容的提问来源于stack exchange,提问作者Just_Stacking
相关产品推荐
相关产品推荐

