django:找不到名为<app> .urls </app>的模块

时间:2012-06-03 09:55:16

标签: python django wsgi

我目前正在尝试使用django开发一个相当简单的应用程序,但我在开头几乎停留:我的项目名为“kundencenter”,我的应用程序是“customermgr”。

项目和应用都有urls.py,项目的urls.py包含应用:

from django.conf.urls import patterns, include, url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^customer/', include('kundencenter.customermgr.urls')),
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

但是,当我现在尝试访问customer/时,我会看到ImportError

Django Version: 1.4
Exception Type: ImportError
Exception Value:    
No module named customermgr.urls
Exception Location: /usr/local/lib/python2.7/dist-packages/django/utils/importlib.py in import_module, line 35
Python Executable:  /usr/bin/python
Python Version: 2.7.1
Python Path:    
    ['/usr/lib/python2.7',
     '/usr/lib/python2.7/plat-linux2',
     '/usr/lib/python2.7/lib-tk',
     '/usr/lib/python2.7/lib-old',
     '/usr/lib/python2.7/lib-dynload',
     '/usr/local/lib/python2.7/dist-packages',
     '/usr/lib/python2.7/dist-packages',
     '/usr/lib/python2.7/dist-packages/PIL',
     '/usr/lib/python2.7/dist-packages/gtk-2.0',
     '/usr/lib/pymodules/python2.7',
     '.',
     '/var/www/kundencenter',
     '/var/www']

正如你所看到的,我已经对PYTHONPATH感到困惑,但无济于事。您可能已经猜到,该项目位于/var/www/kundencenter。我还检查过创建了__init__.py个文件,它们是(它们是空的)。当我运行manage.py runserver并将Apache与mod_wsgi一起使用时,会出现错误。

我的智慧结束了。有没有人知道如何摆脱这个错误?

4 个答案:

答案 0 :(得分:2)

您是否尝试过没有项目名称?

url(r'^customer/', include('customermgr.urls')),

而不是

url(r'^customer/', include('kundencenter.customermgr.urls')),

顺便说一句,如果不是这样的话,用尽可能短的路径导入模型(或其他所有东西)。 如果您在同一个应用程序中导入模型,则juste使用“从模型导入X,Y,Z”。

如果您必须从任何其他应用程序导入模型,函数,类等,请使用“from my_other_app.models import X,Y,Z”,但不要包含您的项目名称。

如果有一天,你想要为另一个django项目回收你的应用程序,它将为你带来一些痛苦:)

答案 1 :(得分:1)

您应该使用PIP在虚拟环境下构建所有内容,包括安装Django以及您需要的所有其他模块/库。然后你不必担心搞乱Python路径。尝试谷歌搜索Python + Django + Virtualenv + PIP并阅读一些推荐的设置。 真的 简化整个安装和配置过程,而且所有内容都是自包含的,您可以使用Fabric或其他部署工具轻松部署。

祝你好运,我希望有所帮助。

答案 2 :(得分:0)

您可能在Python模块搜索路径上的其他位置安装了一个模块/软件包,该搜索路径首先被拾取。

在WSGI脚本文件的开头添加:

import kundencenter
print kundencenter.__file__

并查看从哪里获取。

答案 3 :(得分:0)

将您的PYTHONPATH设置为:

['/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-linux2',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PIL',
 '/usr/lib/python2.7/dist-packages/gtk-2.0',
 '/usr/lib/pymodules/python2.7',
 '/var/www/kundencenter']

和urlpatterns:

urlpatterns = patterns('',
    url(r'^customer/', include('customermgr.urls')),
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

我不知道你的目录结构是什么,所以这是我最好的gess。