Python/django导入错误
我在从其他文件导入函数时遇到问题 我有文件forms.py和helpers.py My helpers.py:Python/django导入错误,python,django,python-2.7,python-import,Python,Django,Python 2.7,Python Import,我在从其他文件导入函数时遇到问题 我有文件forms.py和helpers.py My helpers.py: from .forms import * def check_pesel(pesel): sum, ct = 0, [1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1] for i in range(11): sum += (int(pesel[i]) * ct[i]) return (str(sum)[-1] == '0')
from .forms import *
def check_pesel(pesel):
sum, ct = 0, [1, 3, 7, 9, 1, 3, 7, 9, 1, 3, 1]
for i in range(11):
sum += (int(pesel[i]) * ct[i])
return (str(sum)[-1] == '0')
def check_nip(nip_str):
nip_str = nip_str.replace('-', '')
if len(nip_str) != 10 or not nip_str.isdigit():
return False
digits = map(int, nip_str)
weights = (6, 5, 7, 2, 3, 4, 5, 6, 7)
check_sum = sum(map(mul, digits[0:9], weights)) % 11
return check_sum == digits[9]
和forms.py:
from .helpers import *
#(...) rest of code
当我尝试在forms.py中使用check_pesel()时,我得到:
global name 'check_pesel' is not defined
当我从.helpers导入check_pesel更改时,check_nip我得到:
无法导入名称检查\u nip
如何解决此问题?当您尝试循环导入(
.forms
imports.helpers
和.helpers
imports.forms
)时,Python无法再次导入第一个模块(因为它已经在导入它),这就是为什么会出现您描述的错误。不幸的是,当您尝试循环导入(.forms
imports.helpers
和.helpers
导入.forms
)时,必须重新排列代码(在本例中与Django无关)Python无法再次导入第一个模块(因为它已经在导入它)这就是为什么你会得到你描述的错误。不幸的是,当您尝试循环导入(.forms
imports.helpers
和.helpers
导入.forms
)时,必须重新排列代码(在本例中与Django无关)Python无法再次导入第一个模块(因为它已经在导入它)这就是为什么你会得到你描述的错误。不幸的是,当您尝试循环导入(.forms
imports.helpers
和.helpers
导入.forms
)时,必须重新排列代码(在本例中与Django无关)Python无法再次导入第一个模块(因为它已经在导入它)这就是为什么你会得到你描述的错误。不幸的是,您必须重新排列代码(在本例中与Django无关)正如其他人所指出的,这是使用循环导入的问题。在python中,循环导入/依赖项并不是明确禁止的,但是您必须知道如何正确地执行它们
如果有第三个文件同时从表单和帮助程序导入*,您会发现行为会根据导入顺序发生变化。如果先导入表单,则帮助程序将无法访问表单中的任何内容;如果先导入帮助程序,则表单将无法访问帮助程序中的任何内容
在这种情况下,解决问题的简单方法是使用以下方法:
# file y.py
import x
def foo():
x.bar()
# file x.py
import y
def bar():
y.foo()
因为它不使用“from x import*”,所以在导入过程中不访问依赖项时,这将适用于循环依赖项。(在我的示例中,我只使用函数体内部的依赖项,这些依赖项在导入过程中不会被调用,因此这是正常的)正如其他人所指出的,使用循环导入存在问题。在python中,循环导入/依赖项并不是明确禁止的,但是您必须知道如何正确地执行它们 如果有第三个文件同时从表单和帮助程序导入*,您会发现行为会根据导入顺序发生变化。如果先导入表单,则帮助程序将无法访问表单中的任何内容;如果先导入帮助程序,则表单将无法访问帮助程序中的任何内容 在这种情况下,解决问题的简单方法是使用以下方法:
# file y.py
import x
def foo():
x.bar()
# file x.py
import y
def bar():
y.foo()
因为它不使用“from x import*”,所以在导入过程中不访问依赖项时,这将适用于循环依赖项。(在我的示例中,我只使用函数体内部的依赖项,这些依赖项在导入过程中不会被调用,因此这是正常的)正如其他人所指出的,使用循环导入存在问题。在python中,循环导入/依赖项并不是明确禁止的,但是您必须知道如何正确地执行它们 如果有第三个文件同时从表单和帮助程序导入*,您会发现行为会根据导入顺序发生变化。如果先导入表单,则帮助程序将无法访问表单中的任何内容;如果先导入帮助程序,则表单将无法访问帮助程序中的任何内容 在这种情况下,解决问题的简单方法是使用以下方法:
# file y.py
import x
def foo():
x.bar()
# file x.py
import y
def bar():
y.foo()
因为它不使用“from x import*”,所以在导入过程中不访问依赖项时,这将适用于循环依赖项。(在我的示例中,我只使用函数体内部的依赖项,这些依赖项在导入过程中不会被调用,因此这是正常的)正如其他人所指出的,使用循环导入存在问题。在python中,循环导入/依赖项并不是明确禁止的,但是您必须知道如何正确地执行它们 如果有第三个文件同时从表单和帮助程序导入*,您会发现行为会根据导入顺序发生变化。如果先导入表单,则帮助程序将无法访问表单中的任何内容;如果先导入帮助程序,则表单将无法访问帮助程序中的任何内容 在这种情况下,解决问题的简单方法是使用以下方法:
# file y.py
import x
def foo():
x.bar()
# file x.py
import y
def bar():
y.foo()
因为它不使用“from x import*”,所以在导入过程中不访问依赖项时,这将适用于循环依赖项。(在我的示例中,我只使用函数体内部的依赖项,这些依赖项在导入过程中不会被调用,因此这是正常的)您有一个循环导入!这就是为什么你会犯这样的错误。当尝试循环导入时,这是一个标准的python错误。是否必须将
.forms
导入helpers.py
模块?如果您可以在不破坏模块的情况下删除它,这将解决您的错误。在helpers.py中,我几乎导入了所有内容(模型、表单等),因此在views.py(在django中)中,我只能导入一个文件。但是,在forms.py中,我需要访问模型,这就是我导入helpers.py的原因。有什么改变的建议吗?不幸的是没有。那是ar