Django:打破观点

Bra*_*ant 22 django django-views

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

我发现在开发应用程序时,我经常会得到很多观点.

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

res*_*dsk 33

拆分 views.py

您的大多数代码可能希望您的视图可以访问myapp.views.viewname.我看到人们分解他们的观点但保留这个python名称的一种方法是创建一个views/目录. views/__init__.py将有:

from .foo_views import *
from .bar_views import *
from .baz_views import *
Run Code Online (Sandbox Code Playgroud)

然后,在views/foo_views.py,放,:

def foo_detail(request, ...):
    # your code here

def foo_list(request, ...):
    # your code here

def your_other_view(...):
    # ...
Run Code Online (Sandbox Code Playgroud)

所以你把所有东西从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'
Run Code Online (Sandbox Code Playgroud)

(否则,Django想象该Unicorn模型是名为"models"的Django应用程序的一部分,这会混淆管理站点.当前通过1.6 - 即将发布的1.7版本将删除此要求.)

  • 你可以做相对进口.我从来没有试过它们,它们看起来有点棘手,但这里有一个相关的问题:http://stackoverflow.com/questions/72852/how-to-do-relative-imports-in-python (3认同)