Каков рекомендуемый способ импорта модулей в проекте Django? - PullRequest
0 голосов
/ 06 января 2010

Это всегда беспокоило меня, и я никогда не придумывал свой собственный предпочтительный способ сделать это.

При импорте чего-либо из одного из ваших собственных приложений в проект django, вы импортируете:

from myproject.mymodule.model import SomeModel
from myproject.anotherone.model import AnotherModel

или вы делаете:

from mymodule.model imoprt SomeModel
from anotherone.model import AnotherModel

Конечно, любой из них будет работать, если вы правильно установили PYTHONPATH при развертывании.Даже комбинация двух в данном проекте будет работать.

Моя проблема со второй формой - это когда у вас есть utils.py или что-то подобное в вашем проекте.

# This feels wrong
import utils

Но это может быть только я.

Какой из них лучше и почему?

Ответы [ 3 ]

5 голосов
/ 06 января 2010

Я бы порекомендовал использовать второй вариант:

from mymodule.model import SomeModel
from anotherone.model import AnotherModel

В Django рекомендуется писать приложения многократного использования, которые вы можете развернуть в нескольких проектах. Указание названия проекта будет препятствовать этой возможности. Это даже усложнит ситуацию, когда вы просто измените имя верхней папки проекта!

Это традиция, которую используют большинство приложений django (например, pinax, django contrib и т. Д.).

Для более подробной информации, вы должны прослушать DjangoCon 2008: многоразовые приложения .

1 голос
/ 06 января 2010

Я предпочитаю использовать абсолютный импорт всякий раз, когда это возможно. Первая причина заключается в том, что в Python 3 происходит относительный импорт, поэтому лучше не поддаваться этой привычке. (Исходя из того, как вы сформулировали вопрос, я предполагаю, что вы помещаете пакеты приложений в пакет вашего проекта.) Вторая причина заключается в том, что это делает цель импортируемого более явной.

Хотя моя абсолютная лучшая практика - не помещать мои пакеты приложений в пакет проекта. Таким образом, легче перемещать приложения, и когда вы используете абсолютный импорт внутри пакета, если позже вы будете использовать то же приложение внутри проекта с другим именем, вам не придется переписывать все импорта, чтобы отразить другой проект имя.

0 голосов
/ 06 января 2010

Как вы обычно упаковываете свои модули? Если вы упаковываете их все в модуле «myproject», вы должны просто продолжать это делать. Если нет, нет никаких оснований для начала. Я не вижу, что участие в проекте Django имеет какое-либо отношение к вопросу: если вы не используете код повторно, зачем беспокоиться о разделении ваших пакетов?

Но на самом деле, еще важнее то, что вы не думаете о том, как упаковать и распространить ваши библиотеки в более широком смысле. Даже если они представляют собой просто набор удобных служебных программ и вы не собираетесь ими делиться, вам следует подумать о проблемах пространства имен. В Python Tutorial есть хорошее базовое обсуждение концепций.

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