首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何导入名称不明确的特定模块?

如何导入名称不明确的特定模块?
EN

Stack Overflow用户
提问于 2011-07-08 23:15:04
回答 3查看 919关注 0票数 1

这发生在Django上下文中,但问题不是Django特定的。

我正在尝试将我的大urls.py分成更小、更易于管理的块(应用程序包含、第三方模块、搜索、管理、开发等等)。因此,我现在不使用urls.py,而使用urls/目录,其中的urls/__init__.py包含如下代码:

代码语言:javascript
复制
import admin
urlpatterns += admin.urlpatterns

现在我遇到了第三方模块的麻烦。例如,我覆盖了一堆django-messages的URL和视图,所以我把它们都放到了urls/messages.py中。事实证明,我不能导入django-messages的视图,因为

代码语言:javascript
复制
from messages.views import inbox

urls/messages.py内部,首先尝试从本地目录导入,找到一个messages模块,但无法导入messages.views,因为urls/messages/views.py显然不存在。我不喜欢将我的模块重命名为类似urls.messages_urls的名称,但是我还没有找到一种明确地告诉Python来导入“其他”messages.views的方法。我也不想通过字符串指定我导入的视图,即使我可以在Django中这样做。

我怎样才能干净利落地解决这个问题?

EN

回答 3

Stack Overflow用户

发布于 2011-07-08 23:28:59

这是错误的做法。

Django有一种将urls.py拆分成单独文件的方法,那就是使用include()。将每个应用程序的urls.py保存在它自己的urls中,并将它们包含在主urls中。

票数 2
EN

Stack Overflow用户

发布于 2012-03-31 21:52:51

对于那些找不到它的人,我遇到了不明确的导入错误。例如,在django项目中,假设我有这样一棵树:

  • init.py
  • tax.py
  • foo.py

  • 税务模块
    • 模型模块

init.py中,我想导入tax.models.tax.Tax。所以我写道:

代码语言:javascript
复制
from tax.models.tax import Tax

但是python没有找到正确的导入(它在tax.models中查找模型)并抛出

代码语言:javascript
复制
ImportError: No module named models

您确实已经理解了这一切都是关于相对导入的。python首先查看当前模块。如果导入的第一部分存在于当前模块中,则导入失败。此行为已在Python 2.5中修复(并且可能已成为Python 3.0中的默认行为),您只需添加:

代码语言:javascript
复制
from __future__ import absolute_import

在你的绝对导入之前。有关更全面的信息,请查看Python 2.5 introduces absolute imports

票数 2
EN

Stack Overflow用户

发布于 2011-07-08 23:17:49

您是否尝试过:

代码语言:javascript
复制
from django.contrib.messages.views import inbox

未经测试,但我认为完整的导入会像预期的那样工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6626551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档