Не удалось импортировать / нет модуля с именем Django Ошибка с Apache - PullRequest
2 голосов
/ 01 ноября 2009

У меня было небольшое доказательство концепции, настроенной на сервере разработки на локальной машине. Сейчас я пытаюсь перенести его в django на производственном сервере, для которого я использую webfaction. Однако теперь, когда я переключился на apache со встроенного сервера django, я получил следующее:

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

Но при проверке моей папки приложений orgDisplay в ней есть файл view.py. Что я делаю неправильно? Я попытался добавить следующее в мой файл settings.py по предложению комнаты IRC django.

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

это путь к моему приложению.

какие-нибудь идеи о том, как даже начать с трудом стрелять в это?

Заранее спасибо.

Ответы [ 4 ]

7 голосов
/ 01 ноября 2009

Я предполагаю, что вы используете 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 ...
)

Неправильно добавлять сам каталог проекта в путь, поскольку вы получаете конфликт имен между несколькими проектами.

3 голосов
/ 01 ноября 2009

Я думаю, что вы добавляете неправильный каталог к ​​sys.path. Я думаю, что Python ищет в папке .../myproject/orgDisplay пакет 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 после каждого редактирования.

0 голосов
/ 16 марта 2012

Если ваш файл WSGI находится в каталоге вашего проекта, то более гибкий способ это сделать:

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

Это позволит вам позже изменить местоположение проекта без необходимости изменения файла WSGI.

0 голосов
/ 01 ноября 2009

глядя на 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"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...