Django启动导入会导致反向发生

时间:2009-09-26 00:54:40

标签: django django-urls python-import

这可能是一个孤立的问题,但我想如果有人想出一个优雅的方法来解决它。

以下是设置:

--------
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

问题是在django构建url之前尝试反向时,shortcuts.py会引发异常。但是,views.py还不需要导入shortcuts.py(仅在实际调用mood_dispatcher时使用)。明显的初步解决方案是: 1)内联导入快捷方式(风格不是很好) 2)使shortcuts.py懒惰地构建MOODS(只需更多工作)

  
    

我最理想的是能够在views.py的顶部说“导入快捷方式,除非加载网址时”

  

1 个答案:

答案 0 :(得分:0)

可以在python中完成它,因为“import”语句只是代码:

if some_conditional:
    import shortcuts

但是在这种情况下它不会是非常pythonic,因为快捷方式是函数mood_dispatcher的依赖,而不是模块本身的依赖,那么你可以在函数内部进行导入。

Python的导入系统非常灵活且功能强大,但你必须注意导入顺序(同时也要避免循环依赖)。

此致