13

我正在学习 Django。我的背景来自 PHP 和 Java,具有使用 Model View Controller 框架的经验。我的每个视图、模型和模板一直都有一个单独的文件——但 Django 教程只提到有一个 views.py 和 models.py。

如果您有一个小型应用程序,这似乎没问题——如果您想按目的组织视图和模型怎么办?例如,项目视图和里程碑视图。我希望您不必为每个视图模块创建另一个 Python 包(应用程序):

python manage.py startapp projects

python manage.py startapp milestones

我可以假设您的视图和模型可以有一个里程碑.py 和一个项目.py,而不是通用的 views.py 和 models.py?然后模型可以在必要的地方导入视图,并将请求路由到特定视图?

4

1 回答 1

26

拥有多个包含视图和模型的文件没有问题。

事实上,你所需要的只是 moduleviews和 module models。在 python 中,模块要么是文件结尾,.py要么是包含文件的文件夹__init__.py

该应用程序可能类似于:

app_folder
    - views
    |    - __init__.py
    |    - some_view.py
    |    - some_other_view.py
    - models
    |    - __init__.py
    |    - some_model.py
    |    - some_other_model.py

models/__init__.py应该看起来类似于下面的代码(用于 django 查找的子模块)。

from some_model import SomeModel
from some_other_model import SomeOtherModel

与常用方法的唯一区别是app_label在模型中定义:

class SomeModel(models.Model):
    class Meta:
        app_label = 'app_folder'

查看相关的文档条目

更新:

开发版本文档说,从 1.7 版本开始,您不必再app_label在这种情况下进行定义。

后记:

事实上,如果您需要这样做,通常意味着您的应用程序太大,您应该将其拆分为多个应用程序。大多数来 django 的人都害怕拥有许多小应用程序。您阅读的第三方应用程序越多,您就越意识到应用程序应该解决一个且只有一个问题。在您的示例中,应用程序milestones似乎完全合法。

于 2012-12-22T20:07:07.767 回答