2014-12-15 11 views
12

Ben şöyle bir urls.py vardır:Ad boşluğu kullanarak bir Django Rest Framework URL'sini nasıl ararım?

router = SimpleRouter() 
router.register(r'meetings', MeetingViewSet, 'meetings-list') 

urlpatterns = patterns('clubs.views', 
    url(r'^(?P<pk>\d+)/', include(router.urls)), 
    url(r'^amazon/$', AmazonView.as_view(), name="amazon"),) 

ben gibi reverse kullanılarak 'meetings-list' url başvurmak istiyorum:

url = reverse('meetings-list')

ama bu denediğimde NoReverseMatch: Reverse for 'MeetingViewSet' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

olsun

Django Rest Framework kullanarak bunu yapmanın bir yolu var mı?

cevap

19

yönlendirici ile görüş kaydederken, Üçüncü argüman olarak base_name'u geçebilirsiniz. Bu temel ad, [base_name]-list ve [base_name]-detail olarak oluşturulan tek tek URL adlarını oluşturmak için kullanılır. Senin durumunda

, sen

router.register(r'meetings', MeetingViewSet, 'meetings-list') 

olarak viewset kaydettirdiğinizin Yani base_namemeetings-list ve görünüm adları meetings-list-list ve meetings-list-detail bulunmaktadır. meetings-list ve meetings-detail aradığınız gibi geliyor, base_namemeetings gerektirir.

router.register(r'meetings', MeetingViewSet, 'meetings') 

Ayrıca URL'ler tanımlamak için artık kullanım dışı patterns sözdizimi kullanılarak, ancak aslında onunla çalışmak doğru url çağrıları kullanmıyorsunuz. Sadece patterns'u değiştirip URL'lerin listesini standart bir Python listesi/tuple ([] veya ()) ile değiştirmeyi öneririm.

Bu sorununuzu çözmeli ve reverse numaralı çağrı sizin için çözülmelidir.

3

bunun senin için çok daha iyi ve daha temiz görünüyor düşünüyorum: Sonra

router_urls = patterns(
    '', 
    url(r'^meetings/$', MeetingViewSet.as_view(), 'meetings-list'), 
) 

urlpatterns = patterns(
    '', 
    url(r'^(?P<pk>\d+)/', include(router_urls, namespace='router')), 
) 

, sen reverse('router:meetings-list', args=(pk,))

Ben MeetingViewSet bir CBV

olduğunu gerekiyordu wil yapmak
+1

Sadece bir kafa, Django REST Framework standart CBV'lere uymuyor ve bu bir hatayı tetikleyecektir çünkü bir kelimeyi '.as_view' içine iletmeniz gerekiyor. –

İlgili konular