Сломал мое приложение Django - проблема пути? - PullRequest
0 голосов
/ 03 февраля 2010

Симптомы:

Не удалось импортировать tinycomm.views. Ошибка была: ни один модуль не назвал модели

Строка кода:

 from tinycomm.models import *

Структура проекта:

/tinycomms
  /tinycomm
    models.py
    views.py
    etc.
  /other apps.

На Mac OS X в разработке Я могу это исправить, поместив tinycomms.tinycomm.models, а затем в другом месте появляется другая похожая ошибка. Я начал работать над разработкой, изменив около 10 путей к моделям и формам в приложении (многие оставались такими же, как tinycomm.module), меняя путь каждый раз, когда он падал.

Я загрузил на рабочий сервер Ubuntu и столкнулся с той же проблемой, только полное имя не решает проблему.

Это приложение работало отлично в течение нескольких месяцев, и единственное серьезное изменение, о котором я могу подумать, - это установить Aptana Jaxer на Mac OS X, но так как проблема также существует в производстве, я не уверен это проблема.

Другим важным изменением было изменение имени папки приложения с «web» на «tinycomm», но с полным исправлением пути в процессе разработки оно работало, поэтому я не уверен, что причина тоже.

Вот список вещей, которые я пробовал:

  1. Все файлы, которые он не может найти, находятся там, где они должны быть
  2. init .py везде, где должно быть
  3. добавлены пути к везде / home / project_dir, / home / project_dir / tinycomms, / home / project_dir / tinycomms / tinycomm
  4. также пытался удалить все эти пути
  5. Попытался убрать все приложения одно за другим - изменились модули, на которые он жаловался, но основной No module named x остался прежним.
  6. удалено все промежуточное ПО и т. Д.
  7. Обновлен до Django 1.2

Вот полный вывод:

Environment:

    Request Method: GET
    Request URL: http://127.0.0.1:8004/
    Django Version: 1.2 alpha 1
    Python Version: 2.5.2
    Installed Applications:
    ['django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.sites',
     'django.contrib.admin',
     'tinycomms_tagging',
     'tinycomm']
    Installed Middleware:
    ('django.middleware.common.CommonMiddleware',
     'django.contrib.sessions.middleware.SessionMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django_authopenid.middleware.OpenIDMiddleware')


Traceback:
    File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/core/handlers/base.py" in get_response
      90.                         request.path_info)
    File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/core/urlresolvers.py" in resolve
      222.                     sub_match = pattern.resolve(new_path)
    File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/core/urlresolvers.py" in resolve
      129.             return self.callback, args, kwargs
    File "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/django/core/urlresolvers.py" in _get_callback
      138.             raise ViewDoesNotExist, "Could not import %s. Error was: %s" % (mod_name, str(e))

Exception Type: ViewDoesNotExist at /
Exception Value: Could not import tinycomm.views. Error was: No module named models

Любые предложения о том, что попробовать дальше, с благодарностью получены!

Содержимое tinycomm / init .py:

from django.utils.translation import ugettext as _

from tinycomms_tagging.managers import ModelTaggedItemManager, TagDescriptor

VERSION = (0, 3, 'pre')

class AlreadyRegistered(Exception):
    """
    An attempt was made to register a model more than once.
    """
    pass

registry = []

def register(model, tag_descriptor_attr='tags',
             tagged_item_manager_attr='tagged'):
    """
    Sets the given model class up for working with tags.
    """
    if model in registry:
        raise AlreadyRegistered(
            _('The model %s has already been registered.') % model.__name__)
    registry.append(model)

    # Add tag descriptor
    setattr(model, tag_descriptor_attr, TagDescriptor())

    # Add custom manager
    ModelTaggedItemManager().contribute_to_class(model,
                                                 tagged_item_manager_attr)

Ответы [ 2 ]

1 голос
/ 03 февраля 2010

Убедитесь, что вы не импортируете tinycomm.views.* в tinycomm.models, круговые зависимости любят генерировать такие ошибки.

Кстати, у вас есть что-то в вашем tinycomm/__init__.py?

EDIT

Трассировка предполагает, что он может исходить от вашего utls.py или одного из его include() s. Вы можете попробовать закомментировать некоторые шаблоны URL и посмотреть, что произойдет.

Если это не поможет, вот простой способ выследить циклический импорт (неочевидный) и аналогичные проблемы импорта, которые могут вам помочь:

Когда вы обнаружите, какой файл вызывает ошибку импорта, попробуйте удалить (закомментировать) все операторы импорта из этого файла: в результате вы должны получить кучу NameErrors. Затем начните добавлять обратно импорт по одному, и когда вы получите ImportError вместо NameError, просто выполните импорт и сделайте это с импортируемым файлом. Надеюсь, это поможет.

1 голос
/ 03 февраля 2010

Проверьте свой код, чтобы увидеть, импортируете ли вы куда-нибудь, начиная с tinycomms. * (Обратите внимание на "s") вместо tinycomm. *. Иногда, когда вы смешиваете относительный импорт с абсолютным импортом, вы получаете странные ошибки, подобные этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...