Python/django导入错误

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')

我在从其他文件导入函数时遇到问题

我有文件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')

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