繁体   English   中英

如何在Django中从项目级别包导入而又不与同名的应用程序级别模块冲突?

[英]How to import from project level package in Django without conflicting with app level module with same name?

我有一个具有以下结构的Django项目(Python 2.7.15):

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    polls/
        __init__.py
        admin.py
        apps.py
        migrations/
            __init__.py
        models.py
        tests.py
        views.py
        utils.py
    utils/
        __init__.py
        filters.py

在我的utils/filters.py MyFilter文件中,我有一个MyFilter类。 但是,从polls/admin.py中,当我尝试from utils.filters import MyFilter运行时from utils.filters import MyFilter ImportError: No module named filters 如何在不重命名polls/utils.py模块或utils包的情况下将我的自定义过滤器导入polls应用程序中?

注意:这不是循环导入问题。 即使我不从utils/filters.py导入任何内容,也会发生这种情况。 这是utils/polls/utils.py之间的名称冲突。 蟒蛇试图找到filters.MyFilter内部polls/utils.py并因此引发错误是没有找到它。 我只想找出一种绕过此冲突并强制python在项目根目录的utils/包内查找filters.MyFilter的方法。

在Python 2中, import utils模棱两可,因为它可以是相对导入,也可以是绝对导入。

如果您通过将以下导入添加到模块顶部来启用Python 3行为,

from __future__ import absolute_import

然后from utils.filters import MyFilter将被视为绝对导入并且可以正常工作。

添加了将来的导入后,如果要从polls/admin.py导入polls/utils.py ,则需要使用一个显式相对导入import .utils polls/admin.py

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM