Django:国际子路线

Django: international subroutes

官方文档 here 中写道 i18n_patterns() 仅允许在您的根 URLconf 中使用。

这对我来说是个问题,因为我需要这些 URL 有效:

这是我的根 urls.py:

urlpatterns += i18n_patterns(
    url(_(r'^produits/detail/'),
        include('produits.urls', namespace="produits")
        ),
    url(_(r'^produits/'),
        include('produits.urls', namespace="produits")
        ),
)

所以,最新的翻译工作正常,但第一个不工作。翻译没问题,但我想 将最后一部分 ('detail/') 传输到应该透明处理它的应用程序 produits。 我该怎么办?

这是我解决问题的方法。这不是一个好的解决方案,但它是目前唯一适用于 Django 1.8 的解决方案。

我已经从我的“produits”应用程序中删除了我的路由,并将它们添加到主 urls.py 这意味着混合应用程序配置和全局配置。我不喜欢。

我还在每条路线前添加了应用程序的名称:produits_detailproduits_index。因此我知道这些路线适用的应用程序。再一次,我不喜欢混合 "global setting" 和特定设置,但似乎我别无选择。总之,几行代码,而且效果很好。

from django.contrib import admin
from django.conf.urls import include, url
from django.conf.urls.i18n import i18n_patterns
from django.utils.translation import ugettext_lazy as _
from produits import views as p_views

urlpatterns = [
    url(r'^i18n/', include('django.conf.urls.i18n')),
    url(r'^admin/', include(admin.site.urls)),
]
urlpatterns += i18n_patterns(
    url(_(r'^produits/detail/(?P<slug>[a-zA-Z0-9-_]+)/$'),
        p_views.DetailView.as_view(), name='produits_detail'),
    url(_(r'^produits/'),
        p_views.IndexView.as_view(), name='produits_index'),
)