Python 将较大的views.py拆分为较小的部分

Python 将较大的views.py拆分为较小的部分,python,django,import,circular-dependency,code-design,Python,Django,Import,Circular Dependency,Code Design,我有一个很大的views.py文件,所以我把它分成views.py和admin\u views.py。由于函数往往依赖于另一个文件中的函数,因此我执行了以下操作: # views.py from admin_views.py import a,b,c # admin_views.py from views.py import d,e,f 我发现这会导致循环依赖,而导入不起作用。 解决这个问题的最佳方法是什么?我知道我可以将import语句放在文件的底部,但这似乎不太优雅。在views.py文

我有一个很大的
views.py
文件,所以我把它分成
views.py
admin\u views.py
。由于函数往往依赖于另一个文件中的函数,因此我执行了以下操作:

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

# admin_views.py
from views.py import d,e,f
我发现这会导致循环依赖,而导入不起作用。
解决这个问题的最佳方法是什么?我知道我可以将import语句放在文件的底部,但这似乎不太优雅。

在views.py文件中不应该有核心逻辑。您应该将此核心逻辑放入其他python文件(某些逻辑适用于models.py或forms.py),然后将其导入views.py。基本上,在大多数情况下,导入views.py文件的唯一位置是url.py文件。URL.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函数基本上不需要在任何地方导入

首先,制作一个视图包

--view
  |_ __init__.py
  |_ main.py # previewsly view.py
  |_ admin.py # previewsly view_admin.py
然后,添加一个新文件,其中包含需要在
main
admin
中导入的部件:

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

然后移动导入,以便它们都从
base
导入


最后,在
\uuuu init\uuuuuu
中,从main et admin导入您需要的内容。您在
\uuuu init\uuuu
中导入的所有内容都可以使用“从视图导入内容”进行导入。

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

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

item = models.ForeignKey("SomeOtherClass")

否则,我通常会将逻辑提取到第三个文件中,就像e-satis建议的那样。

酷!所以
base.py
正在从
main.py
admin.py
导入内容?当我从
main.py
导入
base.py
时,这不也会创建循环依赖关系吗?我怎样才能避开这个问题?抱歉,可能我不太理解您的解释“然后移动导入,使它们都从base导入。”公共代码应该在base中。