Django启动导入导致发生反转

Django启动导入导致发生反转,django,django-urls,python-import,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' %

这可能是一个孤立的问题,但我想我会问一下,以防有人想到一个优雅的方法来解决它

以下是设置:

--------
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) Make shortcuts.py懒洋洋地构建情绪(只是做更多的工作)

理想情况下,我希望能够在views.py顶部说,“导入快捷方式,加载URL时除外”

您可以在python中执行此操作,因为“import”语句只是代码:

if some_conditional:
    import shortcuts
但在本例中,它不是很python,因为快捷方式是函数mood_dispatcher的依赖项,而不是模块本身的依赖项,所以您可以在函数内部进行导入

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


关于

是的,这是有道理的-可能这里最不难看的事情就是按照您所说的去做,然后导入函数本身。