如何让带/不带语言前缀的URL在Django i18n中均可正常访问?
Django 4.2.1 多语言路由配置方案
问题场景
项目结构如下:
django-project |-core | |-settings.py | └-urls.py |-app1 | |-models.py | |-admin.py | └-urls.py |-app2 └-locale └-en └-LC_MESSAGES |-django.mo └-django.po
core/settings.py已配置默认语言为fr,多语言相关设置如下:
# core/settings.py MIDDLEWARE = [ # ... 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.locale.LocaleMiddleware', 'django.middleware.common.CommonMiddleware', # ... ] # ... LANGUAGE_CODE = 'fr' TIME_ZONE = 'UTC' USE_I18N = True USE_TZ = True from django.utils.translation import gettext_lazy as _ LANGUAGES = ( ('fr', _('Français')), ('en', _('Anglais')), ) LOCALE_PATHS = [ BASE_DIR / 'locale', ]
当前遇到的问题:
- 使用
i18n_patterns时,http://localhost:8000/fr/app1/显示Bonjour,http://localhost:8000/en/app1/显示Hello,但http://localhost:8000/app1/会重定向到en路径显示Hello。 - 设置
prefix_default_language=False后,不带前缀的http://localhost:8000/app1/显示Bonjour,但带fr前缀的http://localhost:8000/fr/app1/无法访问。
需要实现:http://localhost:8000/fr/app1/和http://localhost:8000/app1/均显示Bonjour,同时http://localhost:8000/en/app1/正常显示Hello。
解决方案
1. 修改settings.py配置
添加prefix_default_language=False,确保默认语言的不带前缀URL可访问:
# core/settings.py prefix_default_language = False
2. 调整根urls.py路由配置
在根urls.py中,同时添加默认语言的带前缀路由和多语言路由集合,确保两种路径都能匹配:
# core/urls.py from django.conf.urls.i18n import i18n_patterns from django.urls import path, include # 手动添加默认语言fr的带前缀路由 urlpatterns = [ path('fr/', include('app1.urls')), # 可添加其他非多语言路由,如admin等 # path('admin/', admin.site.urls), ] # 为其他语言(如en)添加带前缀的路由,同时支持默认语言的不带前缀访问 urlpatterns += i18n_patterns( path('', include('app1.urls')), # 其他多语言路由... )
3. 生成并完善法语翻译文件
当前locale目录仅存在en的翻译文件,需要生成fr的翻译文件并添加对应翻译:
- 在项目根目录执行命令生成法语翻译模板:
django-admin makemessages -l fr
- 打开
locale/fr/LC_MESSAGES/django.po,添加对应翻译内容,例如:
msgid "Hello" msgstr "Bonjour"
- 编译翻译文件:
django-admin compilemessages
验证效果
完成配置后:
http://localhost:8000/app1/:使用默认语言fr,显示Bonjourhttp://localhost:8000/fr/app1/:匹配手动添加的fr前缀路由,显示Bonjourhttp://localhost:8000/en/app1/:匹配i18n_patterns中的en前缀路由,显示Hello
内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito
相关产品推荐
相关产品推荐

