2016-04-05 7 views
1

NamespaceVersioning ile django-rest-framework kullanıyorum. Benim asıl urls.py şöyle görünür:Sürümlü API'lar için adlandırılmış URL'lerle temel tersine dön

... 
url(r'^api/v1/', include('my_api.api_urls', app_name="api", namespace='v1')), 
... 

Ve my_api.api_urls.py içinde:

urlpatterns = [ 
    url(r'^some-endpoint/$', api_views.MyView.as_view(), name='some'), 
] 

Her nasılsa bu URL'leri ters edebilmek için başarısız. Neden bunu yapamıyorum? NoReverseMatch istisnası alıyorum.

reverse('some') 

Django adlı için ad etrafında başımı sarmak olamaz, ama değil sadece son tanımlanan rotayı kullanmalıyım? Ad alanı bağımsız değişkenini ana URL'den kaldırırsam her şey yolunda gider.

düzenlemek Ayrıca

çalışmıyor:

reverse('v1:some') 

Ben de ekleyebiliriz ki, benim ana URL'ler dosyasında, ben API/v1/öneki için birden URL'lerin dosyaları da dahil olmak ediyorum: django içinde url isimleri ters zaman

... 
url(r'^api/v1/', include('my_api.api_urls', app_name="api", namespace='v1')), 
url(r'^api/v1/', include('my_other_api.api_urls', app_name="api", namespace='v1')), 
... 

cevap

4

, sen namespace:url-name desenle ters gerekiyor.

Sizin ters çağrı aşağıdaki gibi görünmelidir:

reverse('v1:some') 

Bkz: How to use reverse() in django

Güncelleme: Birden url girdileri aynı ad kullanıyor. URL ad alanlarını benzersiz tutun.

+0

D'uh, Bunu zaten denedim, işe yaramıyor ... – Nuschk

+0

Bunu denediniz mi: http://www.django-rest-framework.org/api-guide/versioning/# reversing-urls-için-sürüm-apis ?? 'rest_framework.reverse içe aktarma' işlevinin tersi işlevini kullanın. – v1k45

+0

Hayır, bunu bilmiyordum. Denerim, teşekkürler. – Nuschk