尽管已导入其软件包,但访问Python模块失败
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了尽管已导入其软件包,但访问Python模块失败,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4139字,纯文字阅读大概需要6分钟。
内容图文
我的Django项目的目录层次结构如下所示:
+ pybsd
|---+ devices
|---+ templates
|---+ views
|---+ interaction
|---- __init__.py
|---- geraete.py
|---- geraetemodelle.py
|---- geraetegruppen.py
|---- __init__.py
|---- ajax.py
|---- html.py
|---- misc.py
|---- __init__.py
|---- urls.py
|---- __init__.py
|---- urls.py
(请原谅德国人的名字.我不希望在这里替换它们,因为在尝试您希望提出的解决方案并回答您的问题时,它会添加另一个可能的错误源.)
对http://URL/devices/. *的每个请求都会分派到/ devices中的urls.py文件中:
# ...
from views import html, ajax, misc, interaction
urlpatterns = patterns('',
# ...
(r'^ajax/update/(?P<table>[a-z_]+)$', ajax.update),
(r'^ajax/delete/(?P<table>[a-z_]+)$', ajax.delete),
(r'^ajax/select_options/(?P<table>[a-z_]+)$', ajax.select_options),
(r'^interaction/geraete/info/(?P<geraet>\d+)$', interaction.geraete.info),
(r'^interaction/geraete/delete/(?P<geraet>\d+)?$', interaction.geraete.delete),
(r'^interaction/geraetemodelle/delete/(?P<geraetemodell>\d+)?$', interaction.geraetemodelle.delete),
(r'^interaction/geraetegruppen/delete/(?P<geraetegruppe>\d+)?$', interaction.geraetegruppen.delete),
# ...
)
除引用交互包的URL定义外,所有URL定义均有效.我不断收到以下错误:
File "/home/simon/projekte/pybsd/../pybsd/devices/urls.py", line 33, in `<module>`
(r'^interaction/geraete/info/(?P<geraet>\d+)$', interaction.geraete.info),
AttributeError: 'module' object has no attribute 'geraete'
我仔细检查了__init__.py文件是否包含任何内容.
也许您已经发现了我犯的(与Python或Django相关的错误?)错误,并且显然看不到.如果没有,请继续阅读.无论如何,感谢您阅读这篇长文章!
解决问题
第一次测试
如果我以字符串形式提供视图功能,它将起作用:
(r'^interaction/geraete/info/(?P<geraet>\d+)$', 'devices.views.interaction.geraete.info'),
(r'^interaction/geraete/delete/(?P<geraet>\d+)?$', 'devices.views.interaction.geraete.delete'),
(r'^interaction/geraetemodelle/delete/(?P<geraetemodell>\d+)?$', 'devices.views.interaction.geraetemodelle.delete'),
(r'^interaction/geraetegruppen/delete/(?P<geraetegruppe>\d+)?$', 'devices.views.interaction.geraetegruppen.delete'),
…或在导入中添加另一行:
from views.interaction import geraete, geraetemodelle, geraetegruppen
但是,使用from views.interaction import *也不起作用,并导致相同的错误消息.
第二次测试
我在/ devices中创建了文件test.py:
from views import interaction
print dir(interaction)
输出:
simon@bsd-simon:~/projekte/pybsd/devices$python test.py
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
同样,没有任何迹象表明我在交互包中创建的模块(geraete.py,geraetemodelle.py,geraetegruppen.py).
与在urls.py中不同,在test.py中尝试从view.interaction导入geraete,geraetegruppen,geraetemodelle导致ImportError:这次没有名为view.interaction的模块.
第三次测试
我启动了Django shell:
$python manage.py shell
>>> import devices.views.interaction.geraete
>>> dir(devices.views.interaction.geraete)
['Abteilung', 'Auftrag', 'Auftragsvorlage', 'Geraet', 'Geraetegruppe', 'Geraetemodell', 'HttpResponse', 'HttpResponseBadRequest', 'HttpResponseRedirect', 'Raum', 'Standort', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'delete', 'info', 'models', 'move', 'render_to_response']
>>>
$python manage.py shell
>>> from devices.views.interaction import geraete
>>> dir(geraete)
['Abteilung', 'Auftrag', 'Auftragsvorlage', 'Geraet', 'Geraetegruppe', 'Geraetemodell', 'HttpResponse', 'HttpResponseBadRequest', 'HttpResponseRedirect', 'Raum', 'Standort', '__builtins__', '__doc__', '__file__', '__name__', '__package__', 'delete', 'info', 'models', 'move', 'render_to_response']
>>>
$python manage.py shell
>>> import devices.views.interaction
>>> devices.views.interaction.geraete
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'module' object has no attribute 'geraete'
>>> dir(devices.views.interaction)
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
解决方法:
当模块位于软件包中并导入软件包时,Python不会自动导入软件包中的所有模块.程序中的某些内容需要导入要使用的模块.那可以是您的urls模块:
import views.interaction.gaerete
或者,如果您希望在导入交互时始终使interaction.garaete始终可用,则可以为interaction / __ init__.py:
import gaerete
内容总结
以上是互联网集市为您收集整理的尽管已导入其软件包,但访问Python模块失败全部内容,希望文章能够帮你解决尽管已导入其软件包,但访问Python模块失败所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。