我正在学习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?然后可以在必要时将模型导入到视图中,并将请求路由到特定视图吗?
答案 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
似乎完全合法。