将一个大的views.py拆分成更小的部分

时间:2012-05-04 02:14:29

标签: python django import circular-dependency code-design

我有一个巨大的views.py文件,因此我将其拆分为views.pyadmin_views.py。由于函数倾向于依赖于另一个文件中的函数,因此我执行了以下操作:

# views.py
from admin_views.py import a,b,c

# admin_views.py
from views.py import d,e,f

我发现这个结果是循环依赖,导入不起作用。 解决这个问题的最佳方法是什么?我知道我可以将import语句放在文件的底部,但这看起来并不太优雅。

3 个答案:

答案 0 :(得分:0)

您应该在views.py文件中没有核心逻辑。您应该将此核心逻辑放入其他python文件(某些逻辑适用于models.py或forms.py)并将其导入views.py。基本上,在大多数情况下,您应该导入views.py文件的唯一位置是urls.py文件。 urls.py文件也可以采用以下格式:

urlpatterns = patterns('management.views',
    #url(r'^index/$', direct_to_template, {'template': 'stats/index.html'},
    #    name="index"),          
    url(r'^pay_invoices/$', 'pay_invoices', name='pay_invoices'), 
)

这使得views.py函数基本上不需要在任何地方导入。

答案 1 :(得分:0)

首先,制作一个视图包。

--view
  |_ __init__.py
  |_ main.py # previewsly view.py
  |_ admin.py # previewsly view_admin.py

然后,添加一个新文件,其中包含您需要在mainadmin中导入的部分:

--view
  |_ __init__.py
  |_ main.py 
  |_ admin.py 
  |_ base.py

然后移动导入,以便从base导入两者。

最后,在__init__中,从main et admin导入您需要的内容。您在__init__中导入的所有内容都可以使用视图导入内容导入。

答案 2 :(得分:0)

循环导入是否与外键关系有关?

如果是这样,您可以将类定义为字符串。

item = models.ForeignKey("SomeOtherClass")

如果失败,我通常会将逻辑提取到第三个文件,如e-satisf所暗示的。