我在本地计算机上的开发服务器上设置了一个小概念验证。我现在正试图将它移动到生产服务器上的django,我正在使用webfaction。但是,现在我从内置的django服务器切换到apache,我得到以下内容:
ViewDoesNotExist: Could not import orgDisplay.views. Error was: No module named orgDisplay.views
但是当检查我的orgDisplay apps文件夹时,其中有一个view.py。我究竟做错了什么?我已经尝试通过建议django IRC房间将以下内容添加到我的settings.py中。
import sys
sys.path.append(r"/home/user/webapps/django_project/myproject/orgDisplay")
这是我的应用的路径。
关于如何开始麻烦拍摄这个的任何想法?
提前致谢。
答案 0 :(得分:7)
我假设您正在使用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()
urls.py:
from django.conf.urls.defaults import *
urlpatterns = (
("", include("orgDisplay.urls")),
# ...
)
orgDisplay / urls.py:
import views
urlpatterns = (
(r'^some_view/$', views.some_view), # It is actually orgDisplay.views.some_view
# many more records ...
)
将项目目录本身添加到路径是一个坏主意,因为您在多个项目之间遇到名称冲突。
答案 1 :(得分:3)
我认为您将错误的目录附加到sys.path
。我认为Python正在查找.../myproject/orgDisplay
包的orgDisplay
文件夹。尝试从字符串中删除orgDisplay
,如下所示:
import sys
sys.path.append(r"/home/user/webapps/django_project/myproject")
另一种选择是在import语句中简单地添加myproject
(或实际调用的任何项目)。
# instead of "from orgDisplay import views"
from myproject.orgDisplay import views
此外,请确保在每次编辑后重新启动Apache。
答案 2 :(得分:0)
查看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"))
答案 3 :(得分:0)
如果您的WSGI文件位于项目目录中,则可以采用稍微灵活的方式:
import os, sys
sys.path.append(os.path.dirname(__file__))
这使您可以在以后更改项目位置,而无需修改WSGI文件。