如果不复制API端点,Django Get请求将返回空数组

如果不复制API端点,Django Get请求将返回空数组,django,django-rest-framework,Django,Django Rest Framework,在过去的两个月里,我一直在为自己奇怪的行为挣扎,我无法控制自己 我的一个django应用程序URL文件如下所示: urlpatterns = { path('containers/', GetProductContainers.as_view()), path('delete/<deleteTime>', DeleteProcessedStockTime.as_view()), path('containers/', GetProductContainers.

在过去的两个月里,我一直在为自己奇怪的行为挣扎,我无法控制自己

我的一个django应用程序URL文件如下所示:

urlpatterns = {
    path('containers/', GetProductContainers.as_view()),
    path('delete/<deleteTime>', DeleteProcessedStockTime.as_view()),
    path('containers/', GetProductContainers.as_view()),
    path('input/', InsertMultiProcessedStock.as_view()),
    path('<str:stockT>/', ProcessedStockTimeView.as_view(), name="stockstime"),
    path('', ProductListDetailsView.as_view(), name="details"),
} 
urlpatterns={
路径('containers/',GetProductContainers.as_view()),
路径('delete/',DeleteProcessedStockTime.as_view()),
路径('containers/',GetProductContainers.as_view()),
路径('input/',InsertMultiProcessedStock.as_view()),
路径(“/”,ProcessedStockTimeView.as_view(),name=“stockstime”),
路径(“”,ProductListDetailsView.as_view(),name=“details”),
} 
正如您所看到的,这个路径
path('containers/',GetProductContainers.As_view()),
在我的urlpatterns中有两次。原因是,只要我删除一个,它就会返回一个空数组我删除哪一个并不重要如果两者都存在,我会得到我期望的319条记录。我可以删除这两个数组中的任何一个,它将返回一个空数组,但只要我有2个数组,它就会再次工作


谁能想出一个解释,或者我如何开始调试它呢?

我相信这是因为您将urlpatterns创建为一个集合,而不是一个列表。 集合是无序的类型,因此url模式不会以正确的顺序解析

例如:

>>> {
...     path('containers/', TestView.as_view()),
...     path('delete/<deleteTime>', TestView.as_view()),
...     path('input/', TestView.as_view()),
...     path('<str:stockT>/', TestView.as_view(), name="stockstime"),
...     path('', TestView.as_view(), name="details"),
... }
{<URLPattern '<str:stockT>/' [name='stockstime']>, <URLPattern '' [name='details']>, <URLPattern 'containers/'>, <URLPattern 'delete/<deleteTime>'>, <URLPattern 'input/'>}


>>> [
...     path('containers/', TestView.as_view()),
...     path('delete/<deleteTime>', TestView.as_view()),
...     path('input/', TestView.as_view()),
...     path('<str:stockT>/', TestView.as_view(), name="stockstime"),
...     path('', TestView.as_view(), name="details"),
... ]
[<URLPattern 'containers/'>, <URLPattern 'delete/<deleteTime>'>, <URLPattern 'input/'>, <URLPattern '<str:stockT>/' [name='stockstime']>, <URLPattern '' [name='details']>]
>{
…路径('containers/',TestView.as_view()),
…路径('delete/',TestView.as_view()),
…路径('input/',TestView.as_view()),
…路径('/',TestView.as_view(),name=“stockstime”),
…路径(“”,TestView.as_view(),name=“details”),
... }
{, , }
>>> [
…路径('containers/',TestView.as_view()),
…路径('delete/',TestView.as_view()),
…路径('input/',TestView.as_view()),
…路径('/',TestView.as_view(),name=“stockstime”),
…路径(“”,TestView.as_view(),name=“details”),
... ]
[, , ]

我认为这是因为您将urlpatterns创建为一个集合,而不是一个列表。 集合是无序的类型,因此url模式不会以正确的顺序解析

例如:

>>> {
...     path('containers/', TestView.as_view()),
...     path('delete/<deleteTime>', TestView.as_view()),
...     path('input/', TestView.as_view()),
...     path('<str:stockT>/', TestView.as_view(), name="stockstime"),
...     path('', TestView.as_view(), name="details"),
... }
{<URLPattern '<str:stockT>/' [name='stockstime']>, <URLPattern '' [name='details']>, <URLPattern 'containers/'>, <URLPattern 'delete/<deleteTime>'>, <URLPattern 'input/'>}


>>> [
...     path('containers/', TestView.as_view()),
...     path('delete/<deleteTime>', TestView.as_view()),
...     path('input/', TestView.as_view()),
...     path('<str:stockT>/', TestView.as_view(), name="stockstime"),
...     path('', TestView.as_view(), name="details"),
... ]
[<URLPattern 'containers/'>, <URLPattern 'delete/<deleteTime>'>, <URLPattern 'input/'>, <URLPattern '<str:stockT>/' [name='stockstime']>, <URLPattern '' [name='details']>]
>{
…路径('containers/',TestView.as_view()),
…路径('delete/',TestView.as_view()),
…路径('input/',TestView.as_view()),
…路径('/',TestView.as_view(),name=“stockstime”),
…路径(“”,TestView.as_view(),name=“details”),
... }
{, , }
>>> [
…路径('containers/',TestView.as_view()),
…路径('delete/',TestView.as_view()),
…路径('input/',TestView.as_view()),
…路径('/',TestView.as_view(),name=“stockstime”),
…路径(“”,TestView.as_view(),name=“details”),
... ]
[, , ]

通常的做法是对urlpatterns使用
list
,而不是
set
。不确定这是错误的原因,请尝试更改类型:
urlpatterns=[…]
。谢谢,我明天回去工作时会尝试,看看是否有什么变化。Regardsat的常见做法是对urlpatterns使用
list
,而不是
set
。不确定这是错误的原因,请尝试更改类型:
urlpatterns=[…]
。谢谢,我明天回去工作时会尝试,看看是否有什么变化。换句话说,您的/containers/URL被解释为stockstime的字符串参数,因此它将从该视图返回一个与“containers”匹配的元素列表,而“containers”中没有。谢天谢地!这似乎解决了以许多不同方式表现出来的问题。谢谢换句话说,您的/containers/URL被解释为stockstime的字符串参数,因此它将从该视图返回一个与“containers”匹配的元素列表,其中没有任何元素。谢天谢地!这似乎解决了以许多不同方式表现出来的问题。谢谢