1

在我的 Django 应用程序中,我有很多代码,所以我拆分了我的源文件并将它们放入子文件夹中,如下所示:

myproject/
    myapp/
        management/
            __init__.py
        models/
            __init__.py
            common.py
            users.py
            matches.py
        questionnaires/
            demographics/
                templates/
                __init__.py
                models.py
                views.py
            ...
        views/
            __init__.py
            abstract.py
            concrete.py

现在我很困惑该放什么INSTALLED_APPS。是所有包含模型的文件夹吗?或者所有包含源的文件夹?如果我包含所有子文件夹,是否还需要包含父文件夹?这应该与 my my论点中setup.py的内容相匹配吗?packages

注意:我知道我可以将它重构为多个应用程序,但是(1)我希望所有这些功能都有一个公共命名空间,因为它正在重新分配,并且(2)我对我的问题的答案感到好奇。

4

1 回答 1

1

放入包含 models.py 文件的目录,即您的“应用程序”。Django 使用模型绑定到数据库,之后的一切都只是填充物。

DJango 初创公司(非常瘦身)就是这样

管理.py

# The important part
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "path.to.your.settings")

这将定义重要的部分,但让我们看看已安装的

设置.py

INSTALLED_APPS=(
   'your.app.name'
)

基本上说,你会在models.py那里找到我的和一些模型定义(它们不必定义,但models.py需要存在)

你的/app/name/models.py

class SomeModel(models.Model):
    #... model definition ...
    pass

现在回到你的 settings.py

您的源可以在任何地方存在,因为 DJango 在一些非常特定的位置查找某些东西,但这主要是在您的 settings.py 中配置的

ROOT_URLCONF = 'path.to.urls' # this is the pythonic module path to your `urls.py` file

在您的urls.py文件中,您可以定义一个网址,例如

url(r'^/some/url/def/$', 'some.other.module.handler'),

只要handlerfromsome.other.module返回一个有效的 HttpResponse 对象并且位于 PYTHONPATH 上,类的位置就无关紧要。

Django 有一些关于管理命令的细节,它们必须位于您的应用程序目录中(与您的模型目录相同),因此要定义这些(如果您的model.py文件位于不同的位置),您必须将它们放在您的数据目录中

例如,我有一个具有以下布局的项目

/app  
  /data  
     /commands  
        some_command.py
     models.py  
  /app  
     urls.py  
     settings.py
     ...other-source-files...

我的settings.py简单说法是加载应用程序data并指向app.urlurl 配置,从那时起,您的源代码所在的位置(大部分情况下)都无关紧要。

我们这样做是为了将我们的数据库表命名为data_sometablename vs app_sometablename(我不是这个选择的一部分,在我加入之前很久就发生了)

于 2013-10-18T21:16:42.170 回答