无法在Django路由器中添加url

时间:2015-09-01 06:46:20

标签: django django-views url-routing

我无法添加指向views.py中方法的工作人员URL。在urls.py下面的配置中,我创建了一个DefaultRouter,并注册了6个URL。前5个工作正常(它们是基于类的视图),但最后一个URL(工作者,这是基于方法的视图)不起作用。此URL与url.conf中列出的任何URL都不匹配。我得到的错误消息'使用maidFactory.urls中定义的URLconf,Django按以下顺序尝试了这些URL模式: 。 。 。 。 。 。当前的URL,工人/,并没有匹配任何这些。'

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
router.register(r'slots', views.SlotViewSet)
router.register(r'city', views.CityViewSet)
router.register(r'location',views.LocationViewSet,base_name='locationMy')
router.register(r'workers',views.WorkerViewSet,base_name='getWorkersBySlotAndLocation')

# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
url(r'^', include(router.urls)),
#url(r'^', include('maidFactory.api.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^auth/', include('rest_framework_social_oauth2.urls')),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))]

我基于方法的视图如下:

def WorkerViewSet(request):
    cursor = connection.cursor()
    #cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz])
    cursor.execute("select p.wid,p.fname, a.description from workerProfile as p, workerAccount as a where a.isactive=1 and a.wid=p.wid")
    row = cursor.fetchone()
    return HttpResponse(row)

1 个答案:

答案 0 :(得分:0)

您的WorkerViewSet不是实际的DRF ViewSet,而是基于Django函数的视图返回Django HttpResponse。

您应该将其转换为正确的DRF视图集,然后使用此视图集注册您的路由器。

另一种选择是在您的网址文件中将其添加为urlpatterns中的网址,它应该可以正常运行。

urlpatterns = [
    url(r'^my/url/path/$', my_views.WorkerViewSet), # This will work
    ....
]