簡體   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