2009-09-26 4 views
0

Это может быть изолированная проблема, но я решил, что у кого-то есть мысли о грациозном подходе к ее решению.Django startup importing вызывает обратное событие

Вот установка:

-------- 
views.py 
-------- 
from django.http import HttpResponse 
import shortcuts 

def mood_dispatcher(request): 
    mood = magic_function_to_guess_my_mood(request) 
    return HttpResponse('Please go to %s' % shortcuts.MOODS.get(mood, somedefault)) 


------------ 
shortcuts.py 
------------ 
MOODS = # expensive load that causes a reverse to happen 

Вопрос заключается в том, что shortcuts.py вызывает исключение быть выброшен, когда обратный попытка перед тем Джанго делается построения ссылок. Однако view.py еще не нужно импортировать shortcuts.py (используется только тогда, когда на самом деле называется mood_dispatcher). Очевидные исходные решения: ярлыки 1) Импорт рядный (только не очень хорошо стилистически) 2) Сделать shortcuts.py построить Настроения лениво (просто больше работы)

То, что я в идеале хотел бы, чтобы быть в состоянии сказать, в верхней части views.py, «ярлыки импорта, за исключением при загрузке URL»

ответ

0

Ну вы можете сделать это в Python, так как утверждение «импорт» просто код:

if some_conditional: 
    import shortcuts 

Но в этом случае это не будет очень pythonic, поскольку ярлыки являются зависимостью функции mood_dispatcher, а не от самого модуля, тогда вы можете сделать импорт внутри функции.

Система импорта Python очень гибкая и мощная, но вы должны обратить внимание на импортный порядок (а также избежать круговых зависимостей).

С уважением

+0

да, это имеет смысл - вероятно, наименее уродливая вещь здесь это просто сделать, как вы сказали, и импорт в самой функции. – 2009-09-27 01:32:18