Django:国际子路线
Django: international subroutes
官方文档 here 中写道 i18n_patterns()
仅允许在您的根 URLconf 中使用。
这对我来说是个问题,因为我需要这些 URL 有效:
/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
。
我该怎么办?
这是我解决问题的方法。这不是一个好的解决方案,但它是目前唯一适用于 Django 1.8 的解决方案。
我已经从我的“produits
”应用程序中删除了我的路由,并将它们添加到主 urls.py
这意味着混合应用程序配置和全局配置。我不喜欢。
我还在每条路线前添加了应用程序的名称:produits_detail
和 produits_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'),
)
官方文档 here 中写道 i18n_patterns()
仅允许在您的根 URLconf 中使用。
这对我来说是个问题,因为我需要这些 URL 有效:
/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
。
我该怎么办?
这是我解决问题的方法。这不是一个好的解决方案,但它是目前唯一适用于 Django 1.8 的解决方案。
我已经从我的“produits
”应用程序中删除了我的路由,并将它们添加到主 urls.py
这意味着混合应用程序配置和全局配置。我不喜欢。
我还在每条路线前添加了应用程序的名称:produits_detail
和 produits_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'),
)