首页 > 解决方案 > 我的一个网址没有被翻译,给我一个 404 错误

问题描述

我目前使用这种方法在 Django 1.11 上遇到了翻译和 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


urlpatterns = [
    url(r'^$', HomeView.as_view(), name='home'),
    url(_(r'^solucoes$'), SolutionsView.as_view(), name='solutions'),
    url('{solutions}/{solution}$'.format(
        solutions=_(r'^solucoes'),
        solution='(?P<slug>[\w-]+)'
    ), SolutionView.as_view(), name='solution')
]

带有名称的 urlsolutions工作,但solution没有,给我一个 404 错误,即使我翻译并运行compilemessages命令。

标签: djangopython-3.6

解决方案


在 urlpatterns 上使用.format不起作用。我注意到正确的方法(在文档中使用)是将整个 url 包装在_.

错误的:

url('{solutions}/{solution}$'.format(
            solutions=_(r'^solucoes'),
            solution='(?P<slug>[\w-]+)'
        ), SolutionView.as_view(), name='solution')

正确的:

url(_(r'^solucoes/(?P<slug>[\w-]+)/$'), SolutionView.as_view(), name='solution')

推荐阅读