我有以下urlpatterns和APIViews来获取JSON数据。它们都应该工作并返回数据,除了最后一个'pollutant_daily_means'。当我删除'site_daily_means'的视图时,'pollutant_daily_means'会返回它应该的数据。
如果我只删除它上面的'site_daily_means',那么它仍然不起作用,所以它必须与site_daily_means视图以某种方式干扰。
url(r'^api/daily-means/$', views.daily_means.as_view(), name='daily_means'),
url(r'^api/daily-means/(?P<url>\w+)/$', views.site_daily_means.as_view()),
url(r'^api/daily-means/(?P<poll>\w+d+)/', views.pollutant_daily_means.as_view()),
class daily_means(APIView):
def get(self, request):
means = DailyMean.objects.all()
serializer = DailySerializer(means, many=True)
return Response(serializer.data)
class site_daily_means(APIView):
def get(self, request, url):
means = DailyMean.objects.filter(url=url)
serializer = DailySerializer(means, many=True)
return Response(serializer.data)
class pollutant_daily_means(APIView):
def get(self, request, poll):
means = DailyMean.objects.filter(poll=poll)
serializer = DailySerializer(means, many=True)
return Response(serializer.data)
有人可以从上述网址和观点中看到任何明确的理由吗?
答案 0 :(得分:1)
匹配(?P<poll>\w+d+)
的任何内容都将由(?P<url>\w+)
首先匹配,因此site_daily_means
视图将会运行。
您可以通过更改pollutant_daily_means
的网址格式来解决此问题,例如到:
url(r'^api/daily-means/poll/(?P<poll>\w+d+)/', views.pollutant_daily_means.as_view()),
请注意,在这种情况下可能不需要\w+\d+
。您可以将其简化为\w+
,因为您已经在DailyMean
字段上过滤了poll
。