2010-05-16 4 views
3

У меня есть код, который выполняется на каждом (почти) каждом запросе администратора, но не имеет доступа к объекту «запрос».Получить путь к самому Django

Мне нужно найти путь к установке Django. Я могу сделать:

import django 
django_path = django.__file__ 

, но это кажется довольно расточительным в середине запроса.

Внесение импорта в начале памяти модулей памяти? Я вполне уверен, что здесь отсутствует очевидный трюк.

+2

Очевидный вопрос: ПОЧЕМУ вам нужен путь к установке django ... у него есть запах чего-то неправильного. –

ответ

5

До тех пор, пока Django уже был import ed в процессе Python (который у него есть, если ваш код есть, например, в функции просмотра), импорт его снова не будет «ничего» * ​​- так что орехи, используйте import django; django.__file__.

Теперь, если Django не импортирован текущим процессом Python (например, вы звоните os.system("myscript.py") и myscript.py потребности определить пути Джанго), то import djangoбудет немного расточительно. Но нерестится новый процесс по каждому запросу: также довольно расточительный ... Так что если эффективность важна, в любом случае может быть лучше import myscript.

*: на самом деле он установит значение в словаре ... Но это «ничего».

+0

Это в теге шаблона. Первоначально предполагалось, что «django» будет видимым, но у меня есть NameError. Может быть, что-то еще вызывает это? –

+0

Вам нужно явно импортировать 'django' для того, чтобы имя было видимым. Однако Python импортирует кеширование, поэтому он не будет повторно импортирован. Вы можете увидеть, как это работает, глядя на 'sys.modules'. В основном, когда вы произносите 'import foo', если' sys.modules ['foo'] 'существует, это будет использоваться. –

+0

Это кэширование импорта, о котором я не знал. Я предполагаю, что он работает, только если вы импортируете точно так же? то есть я буду страдать за импорт, например, «импорт django как» или «из импорта django ...» –