Django:国际领域

时间:2015-08-01 11:12:18

标签: django django-urls django-i18n

它是在官方文档here中编写的,i18n_patterns()只允许在您的根URLconf中使用。

这对我来说是个问题,因为我需要这些网址:

  • /en/products/
  • /fr/produits/
  • /sv/produkt/
  • /en/products/detail/[my product name]/
  • /en/produits/detail/[my product name]/
  • /sv/produkt/detalj/[my product name]/
  • /sv/produkt/detalj/[my product name]/

继承我的根urls.py

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

所以,对于最新的翻译工作没问题,但第一个没有。翻译还可以,但我想将最后一部分('detail/')转移到应该透明处理它的应用produits 。 我该怎么办?

1 个答案:

答案 0 :(得分:0)

以下是我如何解决问题的方法。这不是一个好的解决方案,但它是目前唯一一个使用Django 1.8的人。

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

我还在每条路线前添加了应用名称:produits_detailproduits_index。因此,我知道那些路线的应用程序。再一次,我不喜欢混合"全球设置"和具体设置,但似乎我别无选择。无论如何,几行代码,它运作良好。

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'),
)