回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我的Django项目的目录层次结构如下所示:</p>
<pre><code>+ 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
</code></pre>
<p>(请原谅德国名字。我不希望在这里替换它们,因为在尝试您希望建议的解决方案并回答您的问题时,这会增加另一个可能的错误源。)</p>
<p>对<a href="http://URL/devices/" rel="nofollow noreferrer">http://URL/devices/</a>.*的每个请求都被调度到网址.py文件寄存/设备:</p>
^{pr2}$
<p>除了那些引用交互包的URL定义外,所有URL定义都有效。我经常遇到以下错误:</p>
<pre><code>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'
</code></pre>
<p>我仔细检查了<code>__init__.py</code>文件是否包含任何内容。在</p>
<p><em>也许你已经找到了(Python或Django相关的?)我犯了一个明显看不见的错误。如果没有,请继续读。无论如何,感谢你阅读这篇长文章!</em></p>
<hr/>
<h2>隔离问题</h2>
<p><strong>第一次测试</strong></p>
<p>如果我以字符串的形式提供视图函数,则可以:</p>
<pre><code>(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'),
</code></pre>
<p>。。。或者在导入中添加另一行:</p>
<pre><code>from views.interaction import geraete, geraetemodelle, geraetegruppen
</code></pre>
<p>但是,使用<code>from views.interaction import *</code>也不起作用,会导致相同的错误消息。在</p>
<hr/>
<p><strong>第二次测试</strong></p>
<p>我创建了一个文件测试.py输入/设备:</p>
<pre><code>from views import interaction
print dir(interaction)
</code></pre>
<p>输出:</p>
<pre><code>simon@bsd-simon:~/projekte/pybsd/devices$ python test.py
['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']
</code></pre>
<p>同样,我在交互包中创建的模块没有任何迹象(杰拉特.py, geraetemodelle.py, 杰拉特格鲁本.py). 在</p>
<p>不像在网址.py,正在尝试<code>from view.interaction import geraete, geraetegruppen, geraetemodelle</code>测试.py这次结果是<code>ImportError: No module named view.interaction</code>。在</p>
<hr/>
<p><strong>第三次测试</strong></p>
<p>我启动了Django shell:</p>
<pre><code>$ 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__']
</code></pre>