这实际上只是一个“最佳实践”问题......
我发现在开发应用时,我经常会看到很多的观看次数。
将这些视图分解为多个视图文件是否常见?换句话说......而不仅仅是拥有views.py,是不是常见的有views_1.py,views_2.py,views_3.py(但更合适,可能按类别命名)?
答案 0 :(得分:33)
views.py
您的大多数代码可能希望您的观看次数可以myapp.views.viewname
进行访问。我看到人们分解他们的观点但保留这个python名称的一种方法是创建一个views/
目录。 views/__init__.py
将有:
from .foo_views import *
from .bar_views import *
from .baz_views import *
然后,在views/foo_views.py
中,输入:
def foo_detail(request, ...):
# your code here
def foo_list(request, ...):
# your code here
def your_other_view(...):
# ...
等。因此,您可以将views.py
中的所有内容移动到此目录中的文件中,生成__init__.py
,删除views.py
,然后就完成了。
然后,当您import myapp.views
时,myapp.views.foo_detail
将引用您在views/foo_views.py
中定义的功能。
此策略也适用于admin.py
等。但如果您想要像这样分开 models.py
,则需要添加app_label = 'your_app_name'
到所有模型的class Meta:
。例如,unicorn_app/models/unicorns.py
可以有这样的条目:
class Unicorn(models.Model):
description = models.CharField(max_length=80)
class Meta:
app_label = 'unicorn_app'
(否则,Django会想象Unicorn
模型是名为“models”的Django应用程序的一部分,这会混淆管理站点。目前通过1.6 - the upcoming 1.7 release will remove this requirement。)
答案 1 :(得分:4)
作为一般准则,请考虑可读性和可维护性:默认的“views.py”只是初始脚手架制作的建议 - 你不必坚持下去。
通常,包含数千行代码的文件很难维护,因此我通常会尝试将较大的模块分解为较小的模块。
另一方面,划分应该有意义 - 将相关功能分成几个文件,大量进口可能使维护更加困难。
最后,您还可以考虑完全简化应用程序的其他方法 你看到重复的代码吗?也许某些功能可以在完全不同的应用程序中移动?等等。
答案 2 :(得分:3)
另一种选择是将一些功能转移到一个或多个应用程序中。这将允许您移动表单和模板并保持结构化。您不一定需要移动模型,这样可以使您免于模型和数据迁移。
例如,您可以使用以下结构:
main_app/
|_models.py
|_views.py
|_forms.py
|_urls.py
|_templates/
sub_app_1/
|_views.py
|_forms.py
|_urls.py
|_templates/
sub_app_2/
|_views.py
|_forms.py
|_urls.py
|_templates/