Django REST Framework路由器在url反向上预先占用期限

时间:2015-03-05 09:54:23

标签: django django-rest-framework

我在路由器中注册了ModelViewSet

from django.conf.urls import url, include
from rest_framework import routers
from . import views

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)

urlpatterns = [
    url(r'^', include(router.urls)),
]

所以我尝试用主键反转网址

from django.core.urlresolvers import reverse
from django.contrib.auth.models import User

user = User.objects.get(pk=1)
url_with_args = reverse('user-list', args=[user.pk])
url_with_kwargs = reverse('user-list', kwargs={'format':user.pk})

但网址的价值是

url_with_args == '/api/users/.1'
url_with_kwargs == '/api/users/.1'

为什么主键值中有一段时间?

我也尝试了与

相同的过程
rest_framework.reverse.reverse

但返回的值为:

'/api/users/.1'

1 个答案:

答案 0 :(得分:0)

此处的问题是您使用user-list而不是user-detail作为指定的网址。 user-list用于转到列表视图/api/resource,而user-detail用于转到详细信息视图/api/resource/1

user-list给你/api/users/.1的原因是因为它匹配的正则表达式为/api/users/.(?<format>),其中format是可选字符串,可以是{{1}之类的字符1}}或xml并控制使用的渲染器。

json的正则表达式为user-detail,其中/api/users/(?<pk>)是一个非可选参数,用于在检索对象时匹配主键。