3

我目前正在尝试使用 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并使用带有 mod_wsgi 的 Apache 时出现错误。

我的智慧已经走到了尽头。有谁知道我怎样才能摆脱这个错误?

4

4 回答 4

2

您是否尝试过不使用项目名称?

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

代替

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

顺便说一句,如果不是这种情况,请以尽可能最短的路径导入您的模型(或其他所有内容)。如果您在同一个应用程序中导入模型,只需使用“从模型导入 X、Y、Z”。

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

如果有一天,您想为另一个 django 项目回收您的应用程序,它会为您省去一些痛苦:)

于 2012-06-03T10:14:13.640 回答
1

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

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

于 2012-08-21T21:10:52.560 回答
0

您可能在 Python 模块搜索路径的其他位置安装了一个模块/包,该路径与首先被拾取的名称相同。

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

import kundencenter
print kundencenter.__file__

看看它是从哪里捡来的。

于 2012-06-03T11:42:46.053 回答
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)),
)

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

于 2012-06-03T12:10:18.367 回答