0

我有一个很大的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 语句放在文件的底部,但这似乎不太优雅。

4

3 回答 3

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 函数基本上不需要在任何地方导入。

于 2012-05-04T02:21:20.773 回答
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__都可以使用 from views import stuff 导入。

于 2012-05-04T02:29:43.530 回答
0

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

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

item = models.ForeignKey("SomeOtherClass")

如果我通常无法将逻辑提取到第三个文件中,例如 e-satis 建议。

于 2012-05-04T23:33:41.217 回答