好的做法:在Django Apps中组织views.py.

时间:2012-12-22 19:47:53

标签: python django views models

我正在学习Django。我的背景来自PHP和Java,具有使用模型视图控制器框架的经验。我的每个视图,模型和模板都有一个单独的文件 - 但是Django教程只提到了一个views.py和models.py。

如果你有一个小应用程序似乎没问题 - 如果你想根据目的组织你的观点和模型怎么办?例如,“项目”视图和“里程碑”视图。我希望你不必为每个视图模块创建另一个Python包(app):

python manage.py startapp projects

python manage.py startapp milestones

我可以假设您可以为视图和模型设置milestones.py和projects.py,而不是通用的views.py和models.py?然后可以在必要时将模型导入到视图中,并将请求路由到特定视图吗?

1 个答案:

答案 0 :(得分:20)

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

事实上,您只需要模块views和模块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'

查看相关的doc entry

<强>更新

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

<强>后记:

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