Django:打破观点

时间:2010-04-20 14:05:09

标签: django django-views

这实际上只是一个“最佳实践”问题......

我发现在开发应用时,我经常会看到很多的观看次数。

将这些视图分解为多个视图文件是否常见?换句话说......而不仅仅是拥有views.py,是不是常见的有views_1.py,views_2.py,views_3.py(但更合适,可能按类别命名)?

3 个答案:

答案 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/