解決了這個問題here之後,還有另外一個問題:如果您在這裏使用翻譯url系統https://docs.djangoproject.com/en/1.8/topics/i18n/translation/,您會看到您添加了像urlpatterns += i18n_patterns(...)
這樣的模式。Django i18n_patterns:resolve()不按預期方式工作
的問題是,基本URL 沒有的語言沒有在帳戶即採取:
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。
相關:[Django i18n默認語言沒有路徑前綴](http://stackoverflow.com/q/13636604/1324033) – Sayse
@Sayse謝謝,但我已經閱讀它,它不能解決我的問題。我想從'/ sv/produkter /'轉到'/ fr/produits /'(看到它是一個有效的URL),做一些「反向翻譯」 –
這就是爲什麼我沒有把它標記爲重複的。我沒有設法找到一個確切的分辨率,沒有時間來幫助我害怕 – Sayse