这可能是一个孤立的问题,但我想如果有人想出一个优雅的方法来解决它。
以下是设置:
--------
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的顶部说“导入快捷方式,除非加载网址时”
答案 0 :(得分:0)
你可以在python中完成它,因为“import”语句只是代码:
if some_conditional:
import shortcuts
但是在这种情况下它不会是非常pythonic,因为快捷方式是函数mood_dispatcher的依赖,而不是模块本身的依赖,那么你可以在函数内部进行导入。
Python的导入系统非常灵活且功能强大,但你必须注意导入顺序(同时也要避免循环依赖)。
此致