我的urls.py
看起来像这样:
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"),)
我想使用'meetings-list'
引用reverse
网址,如:
url = reverse('meetings-list')
但是当我尝试这个时,我得到NoReverseMatch: Reverse for 'MeetingViewSet' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []
有没有办法使用Django Rest Framework做到这一点?
答案 0 :(得分:21)
使用路由器注册视图时,可以将base_name
作为第三个参数传递。此基本名称用于生成单个URL名称,这些名称生成为[base_name]-list
和[base_name]-detail
。
在您的情况下,您将视图集注册为
router.register(r'meetings', MeetingViewSet, 'meetings-list')
因此base_name
为meetings-list
,视图名称为meetings-list-list
和meetings-list-detail
。听起来您正在寻找meetings-list
和meetings-detail
,这需要base_name
meetings
。
router.register(r'meetings', MeetingViewSet, 'meetings')
您还使用现已弃用的patterns
语法来定义网址,但您实际上并未使用适用于它的正确url
调用。我建议只更换patterns
并使用标准Python列表/元组([]
或()
)包装您的网址列表。
这应该可以解决您的问题,并且reverse
的调用应该为您解决。
答案 1 :(得分:3)
我认为这对你来说看起来更好,更干净:
router_urls = patterns(
'',
url(r'^meetings/$', MeetingViewSet.as_view(), 'meetings-list'),
)
urlpatterns = patterns(
'',
url(r'^(?P<pk>\d+)/', include(router_urls, namespace='router')),
)
然后,你会做reverse('router:meetings-list', args=(pk, ))
我认为MeetingViewSet
是CBV