Python Django';s URL调度程序未提取kwargs
我以前在Django中多次配置url模式。Python Django';s URL调度程序未提取kwargs,python,django,django-rest-framework,Python,Django,Django Rest Framework,我以前在Django中多次配置url模式。 突然它不起作用了,我不知道为什么 我正在使用Django REST框架,并且正在使用Django的RequestFactory测试API。 这是我的URL模式: url(r'^samples/(?P<sha256>\w+)/?$', endpoints.SampleAPI.as_view()) 这就是我想做的: class SampleAPI(APIView): def get(self, request: Request, *a
突然它不起作用了,我不知道为什么 我正在使用Django REST框架,并且正在使用Django的RequestFactory测试API。
这是我的URL模式:
url(r'^samples/(?P<sha256>\w+)/?$', endpoints.SampleAPI.as_view())
这就是我想做的:
class SampleAPI(APIView):
def get(self, request: Request, *args, **kwargs) -> Response:
sha256 = self.kwargs.get('sha256', None)
URL得到解析,我进入了方法,但出于某种原因,sha256
总是None
(kwargs
字典总是空的!)。奇怪的是,我在另外两个我正在开发的服务中做了完全相同的事情(关键字参数只有另一个名称),它们都能工作 你们看到我在这里遗漏了什么吗
编辑:更新了帖子,显示了我是如何测试URL的好吧,我没有想到这是一个愚蠢的错误 我不应该在测试中使用
RequestFactory
,因为参数不会以这种方式传递到视图。正确的方法是使用Django的测试
客户端
:
from django.test import Client
client = Client()
response = client.get('/samples/somehash')
很抱歉这里的新手错误。在kwargs之前点击
self
,然后再试一次。我用Django 1.9.2
、djangorestframework 3.6.3
和Python 3.5.3
在本地测试了这一点,它对kwargs
和self.kwargs
都有效。您确定此url已解析为SampleAPI
?你有没有试着把一些print()
或pdb
放在get()
中?@Melvyn也一样result@Kamil它确实解决了SampleAPI问题,我已经调试过了,没问题。这也说明了为什么我们都没有遇到这个问题。您提到了请求工厂,但我怀疑有多少人将其链接到django.test包,只是假设(和我一样)它是一个以合理的方式生成Http请求的包:)
from django.test import Client
client = Client()
response = client.get('/samples/somehash')