首页 文章

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

提问于
浏览
1

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

  • tstprj

  • manage.py

  • tstprj

  • settings.py

  • urls.py

  • wsgi.py

  • init.py

  • webadmin

  • 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>

我在/ No模块名为urls时收到错误ImportError . 追溯:

Environment:


    Request Method: GET
    Request URL: http://<<my_ip_address>>/

    Django Version: 1.6
    Python Version: 2.7.3
    Installed Applications:
    ('django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'webadmin')
    Installed Middleware:
    ('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')


    Traceback:
    File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
      101.                 resolver_match = resolver.resolve(request.path_info)
    File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py" in resolve
      318.             for pattern in self.url_patterns:
    File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py" in url_patterns
      346.         patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
    File "/usr/local/lib/python2.7/dist-packages/django/core/urlresolvers.py" in urlconf_module
      341.             self._urlconf_module = import_module(self.urlconf_name)
    File "/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py" in import_module
      40.         __import__(name)
    File "/var/www/tstprj/tstprj/urls.py" in 
      11.     url(r'^admin/webadmin', include('webadmin.urls')),
    File "/usr/local/lib/python2.7/dist-packages/django/conf/urls/__init__.py" in include
      26.         urlconf_module = import_module(urlconf_module)
    File "/usr/local/lib/python2.7/dist-packages/django/utils/importlib.py" in import_module
      40.         __import__(name)

    Exception Type: ImportError at /
    Exception Value: No module named urls

当然,还有tstprj.urls:

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

    from django.contrib import admin
    admin.autodiscover()

    urlpatterns = patterns('',

        url(r'^admin/webadmin', include('webadmin.urls')),
        url(r'^admin/', include(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"), 
)

有什么事?

2 回答

  • 0

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

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

    我不确定,但您的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” .

    我不确定这回答了这个问题,但也许你可以尝试一下 .

相关问题