【发布时间】:2015-09-23 11:51:02
【问题描述】:
解决了here这个问题之后,还有一个问题:如果你在这里使用翻译url系统https://docs.djangoproject.com/en/1.8/topics/i18n/translation/你会看到你添加了urlpatterns += i18n_patterns(...)这样的模式。
问题是基本网址没有没有考虑语言,即:
-
resolve('/fr/produits/')工作, - 但
resolve('/produits/')不起作用并引发 404。
如何解决?
这是我的网址:
urlpatterns = [
url(r'^debug/?$', p_views.debug, name='debug'),
url(r'^i18n/', include('django.conf.urls.i18n')),
url(r'^login/(\w*)', p_views.login, name='login'),
url(r'^admin/', include(admin_site.urls)),
url(r'^public/(?P<path>.*)$',
'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT},
name='url_public'
),
]
urlpatterns += i18n_patterns(
url(_(r'^produits/detail/(?P<slug>[a-zA-Z0-9-_]+)/$'),
p_views.ProduitDetailView.as_view(), name='produits_detail'),
url(_(r'^produits/'),
p_views.IndexView.as_view(), name='produits_index'),
)
这是我制作的非常简单的 URL 测试器(对应于 /debug 视图):
def debug(req):
def test(url):
try:
return u'<pre>{0} {1}</pre>'.format(url, resolve(url))
except Resolver404:
return u'<pre>{0} {1}</pre>'.format(url, 'None')
response = HttpResponse()
response.write(test('produits'))
response.write(test('produits/'))
response.write(test('/produits'))
response.write(test('/produits/'))
response.write(test('/fr/produits'))
response.write(test('/fr/produits/'))
response.write(test('/en/products/'))
response.write(test('/sv/produkter/'))
return response
这是http://localhost:8000/debug 页面:
produits None
produits/ None
/produits None
/produits/ None
/fr/produits None
/fr/produits/ ResolverMatch(func=produits.views.IndexView, args=(), kwargs={}, url_name=produits_index, app_name=None, namespaces=[])
/en/products/ None
/sv/produkter/ None
最后三行都应该返回 ResolverMatch(...),因为它们都是有效的 URL。
【问题讨论】:
-
@Sayse 谢谢,但我已经阅读了它,它并没有解决我的问题。我想做kinddof“反向翻译”从
/sv/produkter/到/fr/produits/(看看它是一个有效的URL) -
是的,这就是我没有将其标记为重复的原因。我没能找到确切的解决方案,也没有时间帮助我害怕
-
我已更新我的问题以显示更多详细信息。
标签: python django python-2.7 internationalization