2012-07-18 42 views
0

我在写一个Django应用程序时遇到问题。我有一个视图* project_detail *,它应该仅限于该项目的项目负责人。我已经用一个在一个单独的文件helpers.py中定义的装饰器解决了这个问题。如果发生错误,则会调用另一个视图错误。下面是这两个文件views.pyhelpers.pydjango导入视图

#views.py# 
from projectmanagement.helpers import is_projectleader  


@is_projectleader 
def project_detail(request,id): 
... 

def error(request, errormessage) 
.... 
    return render_to_response(...) 

-------------------------------------- 
#helpers.py# 
def is_projectleader(): 
.... 
if not request.user in project.projectleaders: 
    return error(request,errormessage="You are not a projectleader") 
.... 

现在,我得到一个错误,错误没有定义,但如果我添加

from projectmanagement.views import error 

我得到一个错误,我不能导入错误。你有什么建议吗?

+0

这是一个循环导入。感谢提示。我刚刚将我的错误函数移动到文件helpers.py – Moe 2012-07-19 12:20:33

回答

1

首先 - 请写出整个堆栈跟踪和错误消息。 其次 - 如果您将一个文件内的所有内容(例如views.py)都发生了什么。它看起来像循环依赖 - 从views.py你导入helpers.py;从helpers.py导入views.py。

1

导入模块本身,并引用该模块的属性。

1

您不能从另一个模块导入一个模块,反之亦然。将error函数的权限移动到helpers.py或为此类视图创建一个新模块。

+0

是的,你可以。 Python本身对循环导入没有任何问题。 – 2012-07-18 08:57:45

+0

@ IgnacioVazquez-Abrams不幸的是,这不完全正确。 'import smth'总是可以工作,但是'从模块导入smth'会很麻烦。请参阅'有时需要将import导入函数或类,以避免[python FAQ](http://docs.python.org/faq/programming.html#what-are-the-最好的做法 - 使用 - 导入模块),或http://stackoverflow.com/questions/894864/circular-dependency-in-python和http://stackoverflow.com/questions/1556387/圆形进口依赖性合蟒 – Stefano 2012-07-18 13:22:13