如何反转使用 DefaultRouter() 的 url?
How to reverse a url that is using DefaultRouter()?
我正在尝试在我的测试中使用 reverse() 。我试过了!但它不起作用。
我仍然收到错误
django.urls.exceptions.NoReverseMatch: Reverse for 'patients-list' with no arguments not found
。
router = DefaultRouter()
router.register(r'patients', views.PatientSet, base_name='patients')
urlpatterns = [
url(r'^', include(router.urls)),
]
这是ModelViewSet
class PatientSet(viewsets.ModelViewSet):
queryset = Patient.objects.all()
serializer_class = PatientSerializer
permission_classes = [IsDoctorUser]
filter_backends = (filters.DjangoFilterBackend,)
filter_fields = ['is_active']
我在测试中使用这种方式url = reverse('patients-list')
首先,路由器的 base_name
kwarg 已弃用,取而代之的是 DRF 3.11 中的 basename
kwarg,但这不应该是导致问题的原因。我也看不出您提供的代码示例有任何问题。
我建议尝试安装 django-extensions 软件包。安装并配置好 django-extensions 后,您可以使用 python manage.py show_urls
命令输出所有路由的列表。
python manage.py show_urls
/api/accounts/users/ accounts.views.UserViewSet account:user-list
/api/accounts/users/<uuid>/ accounts.views.UserViewSet account:user-detail
每行包含 url /api/accounts/users/<uuid>/
、视图的路径 accounts.views.UserViewSet
和 name(这就是你想要的反向) 路线 account:user-detail
。有了这个,我希望您能够为您的路线找到正确的名称。 URL 部分还指示该路由所需的任何参数。
我正在尝试在我的测试中使用 reverse() 。我试过了
我仍然收到错误
django.urls.exceptions.NoReverseMatch: Reverse for 'patients-list' with no arguments not found
。
router = DefaultRouter()
router.register(r'patients', views.PatientSet, base_name='patients')
urlpatterns = [
url(r'^', include(router.urls)),
]
这是ModelViewSet
class PatientSet(viewsets.ModelViewSet):
queryset = Patient.objects.all()
serializer_class = PatientSerializer
permission_classes = [IsDoctorUser]
filter_backends = (filters.DjangoFilterBackend,)
filter_fields = ['is_active']
我在测试中使用这种方式url = reverse('patients-list')
首先,路由器的 base_name
kwarg 已弃用,取而代之的是 DRF 3.11 中的 basename
kwarg,但这不应该是导致问题的原因。我也看不出您提供的代码示例有任何问题。
我建议尝试安装 django-extensions 软件包。安装并配置好 django-extensions 后,您可以使用 python manage.py show_urls
命令输出所有路由的列表。
python manage.py show_urls
/api/accounts/users/ accounts.views.UserViewSet account:user-list
/api/accounts/users/<uuid>/ accounts.views.UserViewSet account:user-detail
每行包含 url /api/accounts/users/<uuid>/
、视图的路径 accounts.views.UserViewSet
和 name(这就是你想要的反向) 路线 account:user-detail
。有了这个,我希望您能够为您的路线找到正确的名称。 URL 部分还指示该路由所需的任何参数。