Django rest框架:如何在另一个应用程序(同一项目)中注册视图集的路由?

Django rest框架:如何在另一个应用程序(同一项目)中注册视图集的路由?,django,django-rest-framework,Django,Django Rest Framework,Django rest框架(教程和文档)指示将路由注册为前缀视图集对,如下所示 # rapidsms_tut/rapidsms_tut/urls.py #> (rapidsms_tut = project name) #> (rapidsms_tut/rapidsms_tut = main/default app) from rest_framework import routers from voting import views router.register(r'choic

Django rest框架(教程和文档)指示将路由注册为前缀视图集对,如下所示

# rapidsms_tut/rapidsms_tut/urls.py 
#> (rapidsms_tut = project name)
#> (rapidsms_tut/rapidsms_tut = main/default app)
from rest_framework import routers
from voting import views

router.register(r'choices', voting.ChoiceViewSet) # choices is the url prefix (i.e. /choices/)
但是,我无法找到摆脱以下错误的方法(我正在修改我遵循的RapidSM教程,但这并不重要):

投票/models.py

from django.db import models
class Choice(models.Model):
    name = models.CharField(max_length=40, unique=True)
    votes = models.IntegerField(default=0)
from .models import Choice
from rest_framework import viewsets
from .serializers import ChoiceSerializer

class ChoiceViewSet(viewsets.ModelViewSet):
    queryset = Choice.objects.all()
    serializer_class = ChoiceSerializer
投票/视图.py

from django.db import models
class Choice(models.Model):
    name = models.CharField(max_length=40, unique=True)
    votes = models.IntegerField(default=0)
from .models import Choice
from rest_framework import viewsets
from .serializers import ChoiceSerializer

class ChoiceViewSet(viewsets.ModelViewSet):
    queryset = Choice.objects.all()
    serializer_class = ChoiceSerializer
我想这个问题与目录结构/名称空间有关。有线索吗

此外,通过学习Django初学者教程,我学会了将默认应用程序(带有settings.py、url.py等)作为项目文件夹的子文件夹(例如rapidsms_tut作为rapidsms_tut的子文件夹)


然而,我看到过使用不同应用程序的项目,但在项目的根文件夹中(例如在rapidsms_tut中,而不是默认应用程序的子文件夹中)仅使用url.py、settings.py等有什么区别?

问题与导入模块或目录结构无关,因为代码中未定义投票

from voting import views

router.register(r'choices', voting.ChoiceViewSet)
您从
投票
导入了
视图
模块,而不是直接从
投票
导入。您应将路线登记行更改为:

router.register(r'choices', views.ChoiceViewSet)
至于第二个问题,这实际上是一个偏好的问题,Django并不强制您使用这两种结构。以下是我通常用于项目的模板:
settings.py
和主
url.py
位于根项目目录中。然后,我创建了一个名为
apps/
的子目录,其中包含所有应用程序