0

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

这是设置:

--------
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的顶部说“导入快捷方式,加载网址时除外”

4

1 回答 1

0

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

if some_conditional:
    import shortcuts

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

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

问候

于 2009-09-27T00:41:09.873 回答