проблема импорта django - PullRequest
       1

проблема импорта django

0 голосов
/ 23 февраля 2011

Когда я пытаюсь импортировать что-то внутри приложения:

from app_name.models import something 

У меня возникает ошибка импорта, я должен это сделать:

from models import something

Эта проблема возникает только в одном из многих приложений впроект.Что я должен изменить?

Ответы [ 2 ]

1 голос
/ 24 февраля 2011

Это либо то, что @Skirmantas предложил, что app_name не на PYTHONPATH, либо у вас есть конфликт пакетов, где какой-то другой app_name предшествует вашему app_name на PYTHONPATH.

Я догадываюсь, что, вероятно, последнее, что у вас есть приложение с тем же именем пакета, что и у другого стороннего приложения, которое вы используете;Однажды у меня было два пакета registration верхнего уровня в моем PYTHONPATH.

Если вы возьмете мою неудачу с приложением registration в качестве примера, вы обычно упаковываете свой проект примерно так:

myproject/
    myproject/
         registration/
             __init__.py
             models.py
         __init__.py
         settings.py
         urls.py
    setup.py

Это рекомендация сообщества о том, что приложения должны быть упакованы так, чтобы они были совместимы по принципу "включай и работай".Они должны быть пакетом верхнего уровня и иметь возможность ссылаться на ресурсы внутри пакета по абсолютному пути, как предложил @Yuji.Если вам нравится отправлять и упаковывать свои приложения вместе с вашим проектом, это означает, что в дополнение к /myproject, /myproject/myproject также будет на PYTHONPATH.Это даже применяется в некоторых случаях .

Как я уже сказал, это всего лишь догадка, что у вас есть конфликтующие имена пакетов.Если это так, то после этого многословного поста вы должны понимать, что единственный вариант, который у вас есть, - переименовать ваш пакет во что-то более уникальное, но у меня никогда не хватит духу, чтобы сразу же выпустить его кому-нибудь.Из-за печальной правды я никогда не нашел более подходящего названия для замены registration.

0 голосов
/ 23 февраля 2011

Извините, но зачем вам это менять? Таким образом, это более СУХОЙ - вы не будете повторять имя приложения снова и снова - если вы хотите переименовать его в будущем - это будет проще.

РЕДАКТИРОВАТЬ: мой вопрос дан ответ ниже, я, очевидно, не знал о том, что вы всегда должны импортировать, используя полный путь.

Что касается прямого ответа, у меня есть 2 догадки (недостаточно информации для полного ответа):

  1. Может быть, приложение не видит себя как модуль при импорте изнутри
  2. Вам не хватает другого импорта, как правило, для вашего приложения.

Извините, я не могу быть более точным.

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