В культуре django я столкнулся с концепцией повторного использования приложения, но не повторного использования фрагмента.Вот пример того, что я подразумеваю под повторным использованием фрагмента: у меня есть функция getDateTimeObjFromString (sDateTime), очевидно, вы передаете строковую дату-время, и она возвращает объект даты-времени Python.
Назад в конце 1980-х илиВ начале 1990-х годов я познакомился с идеей повторного использования фрагментов на конференции разработчиков FoxPro.Если вы пишете код для конкретной проблемы и находите его полезным в другом месте вашего проекта, переместите его в библиотеку проекта.Если вы обнаружите, что код полезен для других проектов, переместите его в общую библиотеку, к которой могут обращаться все проекты.
(В FoxPro DevCon они не называли его повторным использованием фрагмента. Я придумал этот термин дляпоясните, что я имею в виду повторное использование кусков кода, меньшего, чем целое приложение. FoxPro DevCon был давно, я точно не помню, как они его называли.)
Я прочитал самую последнюю версию «Два шага»Django ", и в нем упоминается повторное использование фрагментов в одном проекте, но я не нашел упоминаний о концепции повторного использования фрагментов в нескольких проектах.
Я писал и использовал getDateTimeObjFromString () задолго до того, как занялся своим djangoприложение.Он находится в пакетах, которые я храню в / home / Common / pyPacks.На моих компьютерах я установил PYTHONPATH = / home / Common / pyPacks, чтобы каждый проект мог получить доступ к коду там.Код для getDateTimeObjFromString () находится в подкаталоге Time в файле с именем Convert.py.Итак, чтобы использовать код в любом проекте:
from Time.Convert import getDateTimeObjFromString
Мое приложение django загружает данные из API, и эти данные включают метки времени.Было бы хорошо, если бы API отправлял объекты даты и времени Python, но вы получаете строки.Следовательно, утилита getDateTimeObjFromString ().
Это всего лишь один пример, есть много маленьких функций в / home / Common / pyPacks, которые я нашел удобными для доступа в моем проекте django.
Да/ home / Common / pyPacks находится под контролем версий в github, и да, я развертываю на любом конкретном компьютере с помощью git pull.
При работе над моим проектом django с компьютера разработчика, PYTHONPATH работает, и я могу импортировать пакеты,Но затем я попытался запустить приложение django на сервере через wsgi.py - PYTHONPATH отключен.Я могу установить PYTHONPATH как на уровне ОС, так и на уровне Apache2, но python игнорирует его, функции не могут импортироваться.
Я не хочу беспокоиться о том, чтобы сделать мою личную универсальную библиотеку официальным пакетом python под PyPI.
Ожидает ли сообщество django, что я копирую и вставляю?
Я пришел к решению: сделать / home / Common / pyPacks пакет psudeo site, поместив символическую ссылку "pyPks" вкаталог site-packages виртуальной среды в / home / Common / pyPacks, добавление «pyPks» в INSTALLED_APPS, а затем изменение всех операторов импорта следующим образом:
original:
from Time.Convert import getDateTimeObjFromString
work around update:
from pyPks.Time.Convert import getDateTimeObjFromString
Мне также пришлось обновить всю мою универсальную библиотекуфайлы для обработки как абсолютного импорта через PYTHONPATH, так и относительного импорта.
Как исправить «Попытка относительного импорта в неупакованном виде» даже с init .py
Есть ли лучший способ повторно использовать фрагменты в проекте django?