Импорт из проекта Django с другим именем папки верхнего уровня - PullRequest
1 голос
/ 05 октября 2010

Я недавно настроил решение для развертывания моего проекта Django, используя Fabric . Основной рабочий процесс:

  1. Проверьте последний источник из git на сервере.
  2. Скопируйте его в каталог Releases и добавьте метку времени к имени каталога.
  3. Обновите текущую символическую ссылку, чтобы она указала на последнюю сборку.

Это работает просто отлично, единственная проблема в том, что каталог верхнего уровня представляет собой символическую ссылку с именем «current», которая указывает на папку, такую ​​как «project_name_2010_10_04». ВСЕ из следующих операторов импорта завершатся ошибкой:

from project_name.app import models

...

INSTALLED_APPS = (
    'project_name.app'
)

...

urlpatterns = patterns('',
    (r'^$', 'project_name.app.views.index'),
)

Таким образом, решение, которое я нашел, заключается в удалении КАЖДОЙ единственной ссылки на 'имя_проекта' в моем проекте, и приложение, кажется, разворачивается и работает просто отлично (на данный момент). Но это не похоже на правильный способ решения проблемы ... в основном потому, что во вновь созданном проекте Django все файлы url.py, settings.py по умолчанию ссылаются на имя проекта, а также в различных упоминаниях документации Django. используя название проекта для разных вещей.

Итак, чтобы подвести итог моей проблемы, есть ли способ указать имя пакета, которое отличается от фактического имени каталога?

Ответы [ 2 ]

4 голосов
/ 05 октября 2010

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

0 голосов
/ 10 октября 2010

Кажется, что у вас есть manage.py, urls.py и друзья прямо в корне вашего хранилища.

Это не правильно: на верхнем уровне должны быть setup.py, requirements.txt и каталог проекта, внутри которого должны жить manage.py и друзья.

(ОК, если вы хотите быть более совместимым с не-Python-миром, он должен находиться в каталоге src/ верхнего уровня ...)

...