代码之家  ›  专栏  ›  技术社区  ›  Noah Clark

无法导入/没有名为django的模块apache出错

  •  2
  • Noah Clark  · 技术社区  · 15 年前

    我在本地机器上的开发服务器上设置了一个小的概念验证。我现在正试图把它转移到生产服务器上的Django,我正在使用Web派系。但是,现在我从内置的Django服务器切换到了Apache,我得到了以下信息:

    ViewDoesNotExist: Could not import orgDisplay.views. Error was: No module named orgDisplay.views
    

    但是当检查我的OrgDisplay应用程序文件夹时,其中有一个view.py。我做错什么了?我已经尝试通过Django IRC房间的建议将以下内容添加到我的settings.py中。

    import sys
    sys.path.append(r"/home/user/webapps/django_project/myproject/orgDisplay")
    

    这是我的应用程序的路径。

    关于如何开始麻烦解决这个问题有什么想法吗?

    事先谢谢。

    4 回复  |  直到 13 年前
        1
  •  7
  •   Alexander Lebedev    15 年前

    我想你在用 mod_wsgi (这是Django作者推荐的),不是 mod_python .这是使用sys.path的方法:

    Django.WSGI:

    import os, sys
    sys.path.append(r"/home/user/webapps/django_project/myproject/")
    os.environ["DJANGO_SETTINGS_MODULE"] = "settings"
    
    sys.stdout = sys.stderr # Prevent crashes upon print
    
    import django.core.handlers.wsgi
    application = django.core.handlers.wsgi.WSGIHandler()
    

    ULLS.PY:

    from django.conf.urls.defaults import *
    urlpatterns = (
       ("", include("orgDisplay.urls")),
       # ...
    )
    

    org显示/urls.py:

    import views
    
    urlpatterns = ( 
        (r'^some_view/$', views.some_view), # It is actually orgDisplay.views.some_view
        # many more records ...
    )
    

    将project dir本身添加到path是一个坏主意,因为在多个项目之间会出现名称冲突。

        2
  •  3
  •   Cassie Meharry    15 年前

    我想你把错误的目录附加到 sys.path . 我认为巨蟒正在寻找 .../myproject/orgDisplay 文件夹 orgDisplay 包裹。尝试删除 有机显示 从字符串中,如下所示:

    import sys
    sys.path.append(r"/home/user/webapps/django_project/myproject")
    

    另一种选择是简单地添加 myproject 在导入语句中(或实际调用的项目)。

    # instead of "from orgDisplay import views"
    from myproject.orgDisplay import views
    

    此外,请确保在每次编辑后重新启动Apache。

        3
  •  0
  •   user200590    15 年前

    看看manage.py,它是这样做的:

    import sys
    
    from os.path import abspath, dirname, join
    from django.core.management import setup_environ
    
    
    # setup the environment before we start accessing things in the settings.
    setup_environ(settings_mod)
    
    sys.path.insert(0, join(PINAX_ROOT, "apps"))
    sys.path.insert(0, join(PROJECT_ROOT, "apps"))
    
        4
  •  0
  •   Chiara Coetzee    13 年前

    如果您的wsgi文件在您的项目目录中,那么一个稍微更灵活的方法是:

    import os, sys
    sys.path.append(os.path.dirname(__file__))
    

    这将使您能够在以后更改项目位置,而不必修改您的wsgi文件。