Apache Django mod_wsgi - 没有名为 urls 的模块错误

Posted

技术标签:

【中文标题】Apache Django mod_wsgi - 没有名为 urls 的模块错误【英文标题】:Apache Django mod_wsig - no modules named urls error 【发布时间】:2014-05-16 12:45:34 【问题描述】:

我有一个简单的 django 管理项目,并在那里创建了另一个名为 webadmin 的应用程序。项目结构如下:

tstprj manage.py tstprj settings.py urls.py wsgi.py init.py 网络管理员 admin.py urls.py views.py models.py init.py

我有一个单独的 wsgi 文件,我从 apache conf 中引用:

# tstprj.wsgi
import os
import sys
sys.path.insert(0, '/var/www/tstprj')

os.environ['DJANGO_SETTINGS_MODULE'] = 'tstprj.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()

和apache的虚拟主机——tstprj.conf:

<VirtualHost *:80>
WSGIScriptAlias / /home/pm/dev/tstprj.wsgi

ServerName <<my_ip_address>>

Alias /static /var/www/tstprj/static/

<Directory /var/www/tstprj/>
AllowOverride All
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

我在/没有名为 urls 的模块处收到错误 ImportError。 回溯:

环境: 请求方法:GET 请求网址:http://>/ Django 版本:1.6 Python版本:2.7.3 已安装的应用程序: ('django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', '网络管理员') 已安装的中间件: ('django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware') 追溯: get_response 中的文件“/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py” 101. resolver_match = resolver.resolve(request.path_info) 解析中的文件“/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py” 318. 对于 self.url_patterns 中的模式: url_patterns 中的文件“/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py” 346.模式=getattr(self.urlconf_module,“urlpatterns”,self.urlconf_module) urlconf_module 中的文件“/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py” 341. self._urlconf_module = import_module(self.urlconf_name) import_module 中的文件“/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py” 40. __import__(名称) 文件“/var/www/tstprj/tstprj/urls.py”在 11. url(r'^admin/webadmin', 包括('webadmin.urls')), 包含文件“/usr/local/lib/python2.7/dist-packages/django/conf/urls/__init__.py” 26. urlconf_module = import_module(urlconf_module) import_module 中的文件“/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py” 40. __import__(名称) 异常类型:ImportError at / 异常值:没有名为 urls 的模块

当然还有 tstprj.urls:

从 django.conf.urls 导入模式、包含、url 从 django.contrib 导入管理员 admin.autodiscover() urlpatterns = 模式('', url(r'^admin/webadmin', 包括('webadmin.urls')), 网址(r'^admin/',包括(admin.site.urls)), )

编辑: webadmin.urls

from django.conf.urls import *
from webadmin.views import *

urlpatterns = patterns('',  
    url(r'^/playlist/(?P<plid>(\d+))/song/add/$', addSong, name="addsong"),
    url(r'^/playlist/(?P<plid>(\d+))/song/(?P<sgid>(\d+))/delete/$', deleteSong),
    url(r'^/playlist/(?P<plid>(\d+))/up/$', moveUpSong),
    url(r'^/playlist/(?P<plid>(\d+))/down/$', moveDownSong),
    url(r'^/playlist/(?P<plid>(\d+))/top/$', moveTopSong),
    url(r'^/playlist/(?P<plid>(\d+))/bottom/$', moveBottomSong),
    url(r'^/playlist/(?P<plid>(\d+))/position/$', moveToPositionSong),
    url(r'^/playlist/(?P<plid>(\d+))/deleteSelected/$', deleteSelectedSongs),
    url(r'^/user/(?P<uid>(\d+))/deleteSelected/$', deleteSelectedStations), 
    url(r'^/user/(?P<uid>(\d+))/station/(?P<sid>(\d+))/playlist/deleteSelected/$', deleteSelectedPlaylists),
    url(r'^/user/(?P<uid>(\d+))/station/(?P<sid>(\d+))/playlist/(?P<plid>(\d+))/delete/$', deletePlaylist),
    url(r'^/user/(?P<uid>(\d+))/station/(?P<sid>(\d+))/playlist/add/$', addPlaylist, name="addplaylist"),   
    url(r'^/user/(?P<uid>(\d+))/playlist/all/$', playlist_list, name="playlist_list"),  
    url(r'^/user/(?P<uid>(\d+))/station/add/$', addStation, name="addStation"),
    url(r'^/user/(?P<uid>(\d+))/station/(?P<sid>(\d+))/$', viewStation, name="viewStation"),
    url(r'^/user/(?P<uid>(\d+))/station/(?P<sid>(\d+))/delete/$', deleteStation, name="deleteStation"), 
)

怎么了?

【问题讨论】:

另外,您是否在INSTALLED_APPS 中安装了webadmin @Yogesh 添加到问题中。在开发中一切正常。 @J.C.Leitão 是的,如果它在 settings.py 文件中,我会这样做(我是 django 和 Web 开发的新手) tstprj.wsgi的内容是什么? 这是第一块代码 【参考方案1】:

你当然不想要这个答案了!但是: 将项目和应用程序目录添加到项目的 wsgi.py 中的 sys.path 中,它可能会找到项目中的所有模块

import sys
sys.path.append('<Project_Directory>')
sys.path.append('<Project_Directory>/AppName')

【讨论】:

【参考方案2】:

我不确定,但您的 apache 配置可能不完整。我不确定它调用的 python 版本是你想要的。

我一般设置python路径,如下:

WSGIDaemonProcess process_name processes=2 threads=12 python-path=/home/pm/dev:home/pm/.../lib/python2.7
WSGIProcessGroup process_name
WSGIRestrictEmbedded On
WSGILazyInitialization On
WSGIScriptAlias / /home/pm/dev/tstprj.wsgi

第一行确保 Python 使用安装在“home/pm/.../lib/python2.7”中的库,并且能够访问“/home/pm/dev”。

我不确定这是否能回答这个问题,但也许你可以试试。

【讨论】:

apache 告诉我 WSGIRestrictEmbedded 和 WSGILazyInitialization '不能发生在 部分' 难道不是我的问题出在 wsgi 中吗,我的意思是,可能需要指定我的 webadmin 应用程序的路径?

以上是关于Apache Django mod_wsgi - 没有名为 urls 的模块错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 mod_wsgi 在 apache 上设置 Django

Django,apache,mod_wsgi - 错误:脚本头过早结束

Apache + mod_wsgi + django:为积压的请求发送默认响应

Django/Apache 使用 mod_wsgi 冻结

使用 Apache 和 mod_wsgi 在 Centos 上设置 Django

Django + mod_wsgi + apache:ImportError at / No module named djproj.urls