url 反向 Django REST Framework 路由器前置期
Django REST Framework router prepending period on url reverse
我在路由器中注册了一个 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)),
]
所以我尝试用主键
反转url
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 的值是
url_with_args == '/api/users/.1'
url_with_kwargs == '/api/users/.1'
为什么主键值中有句点?
我也尝试过与
相同的过程
rest_framework.reverse.reverse
但返回值是:
'/api/users/.1'
这里的问题是您使用 user-list
而不是 user-detail
作为命名的 URL。 user-list
意味着转到列表视图 /api/resource
而 user-detail
意味着转到详细视图 /api/resource/1
.
为什么 user-list
给你 /api/users/.1
是因为它匹配的正则表达式是 /api/users/.(?<format>)
其中 format
是可选的字符串,可以是这样的xml
或 json
并控制使用的渲染器`。
user-detail
的正则表达式是 /api/users/(?<pk>)
,其中 pk
是一个非可选参数,用于在检索对象时匹配主键。
我在路由器中注册了一个 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)),
]
所以我尝试用主键
反转urlfrom 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 的值是
url_with_args == '/api/users/.1'
url_with_kwargs == '/api/users/.1'
为什么主键值中有句点?
我也尝试过与
相同的过程rest_framework.reverse.reverse
但返回值是:
'/api/users/.1'
这里的问题是您使用 user-list
而不是 user-detail
作为命名的 URL。 user-list
意味着转到列表视图 /api/resource
而 user-detail
意味着转到详细视图 /api/resource/1
.
为什么 user-list
给你 /api/users/.1
是因为它匹配的正则表达式是 /api/users/.(?<format>)
其中 format
是可选的字符串,可以是这样的xml
或 json
并控制使用的渲染器`。
user-detail
的正则表达式是 /api/users/(?<pk>)
,其中 pk
是一个非可选参数,用于在检索对象时匹配主键。