【问题标题】:Good Practice: Organizing views.py in Django Apps良好实践:在 Django 应用程序中组织 views.py
【发布时间】:2012-12-09 23:19:11
【问题描述】:

我正在学习 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?然后可以在必要时将模型导入视图,并将请求路由到特定视图?

【问题讨论】:

    标签: python django views models


    【解决方案1】:

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

    事实上,您只需要模块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 似乎完全合法。

    【讨论】:

      猜你喜欢
      • 2013-02-19
      • 2019-01-18
      • 1970-01-01
      • 2013-11-20
      • 2015-08-21
      • 1970-01-01
      • 2011-02-28
      • 1970-01-01
      • 2019-11-06
      相关资源
      最近更新 更多