我有一个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做到这一点的方法?

最佳答案

向路由器注册视图时,可以将base_name作为第三个参数传递。此基本名称用于生成单独的URL名称,它们分别作为[base_name]-list[base_name]-detail生成。

就您而言,您正在将视图集注册为

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


因此,base_namemeetings-list,视图名称是meetings-list-listmeetings-list-detail。听起来您正在寻找meetings-listmeetings-detail,它们需要base_namemeetings

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


您还使用了现在不建议使用的patterns语法来定义url,但是实际上并没有使用正确的url调用。我建议只替换patterns并用标准的Python列表/元组([]())包装您的网址列表。

这应该可以解决您的问题,并且reverse的呼叫应该可以为您解决。

10-08 17:10