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 の上部で、「URL の読み込み時以外はショートカットをインポートする」と言うことができることです。

4

1 に答える 1

0

「インポート」ステートメントは単なるコードであるため、Pythonで実行できます。

if some_conditional:
    import shortcuts

ただし、この場合、ショートカットはモジュール自体ではなく関数気分_ディスパッチャーの依存関係であるため、あまりpythonicではありません。関数内でインポートを実行できます。

Python のインポート システムは非常に柔軟で強力ですが、インポートの順序に注意する必要があります (循環依存も避ける必要があります)。

よろしく

于 2009-09-27T00:41:09.873 に答える