You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django 1.11 URL翻译异常:solution路由返回404错误求助

解决Django 1.11 URL翻译中带slug的URL返回404的问题

我帮你定位到了问题的核心,也整理了对应的修复方案,一起来看看:

问题出在哪?

你定义solution URL时,犯了两个关键错误:

  1. 把正则锚点符号^放进了翻译字符串:_(r'^solucoes')会让^成为翻译内容的一部分,当你把^solucoes翻译成英文solutions时,最终生成的正则会缺少开头的锚点,无法匹配根路径下的/solutions/xxx请求,直接导致404。
  2. 没用到i18n_patterns:虽然你导入了它,但官方推荐用这个工具来管理国际化URL,它能自动处理语言前缀,也让URL翻译更规范。

修复方案

1. 分离正则元字符和翻译文本

只翻译URL里的实际文本部分(比如solucoes),把^、$这些正则专用符号放在翻译字符串外面。

2. 用i18n_patterns包裹所有需要翻译的URL

下面是修复后的完整urls.py代码:

from django.conf.urls import url # noqa
from django.conf.urls.i18n import i18n_patterns
from django.utils.translation import gettext_lazy as _
from core.views import HomeView, SolutionsView, SolutionView

# 非国际化的URL可以放在这里,比如不需要翻译的接口
urlpatterns = []

# 所有需要翻译的URL都放到i18n_patterns里
urlpatterns += i18n_patterns(
    url(r'^$', HomeView.as_view(), name='home'),
    # 单独翻译路径文本,正则锚点放在外面
    url(r'^{solutions}$'.format(solutions=_('solucoes')), SolutionsView.as_view(), name='solutions'),
    # 同样的方式处理带slug的URL
    url(r'^{solutions}/(?P<slug>[\w-]+)$'.format(solutions=_('solucoes')), SolutionView.as_view(), name='solution')
)

最后别忘了这些步骤

  • 更新你的翻译文件:确保po文件里的msgid是solucoes(不带^),对应的目标语言翻译(比如英文)是solutions。
  • 重新编译翻译:
    python manage.py makemessages -l en  # 替换成你的目标语言代码
    python manage.py compilemessages
    
  • 测试时记得带上语言前缀,比如访问/en/solutions/my-slug或者/pt/solucoes/my-slug,如果需要自动跳转默认语言,记得配置LocaleMiddleware和LANGUAGE_CODE。

这样修改后,你的solution URL应该就能正常工作啦!

内容的提问来源于stack exchange,提问作者Vanessa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:27:50