2017-11-24 9 views
0

Djangoプロジェクトの一環として、私のユーザはさまざまなオプションから選択できます。各オプションの機能は別のアプリに保存されています。独自の権利で各アプリです、そして私の質問があるINSTALLED_APPSに記載されているDjangoでAppsのサブセットを反復する

MyProject/ 
    MyProject 
    App1 
    App2 
    Options/ 
     Option1/ 
     Option2/ 
     Option3/ 
     … 
    … 
    manage.py 

オプション1、オプション2など:オプションの中に含まれる各アプリを反復処理の方法があります私のプロジェクト構造は次のようになりますディレクトリ。たとえば、各アプリにutils.pyというファイルがあり、各utils.pyにfooという関数があるとします。

はこのような何かを行う方法があります:

これを失敗
from .. import Options 
survey = [ app.utils.foo() for app in Options] 

、ちょうどすべてのアプリケーションを反復処理する方法はありますか?おそらくdjango.appsでできることはありますか?

答えて

1

あなたのapps.pyを設定しました

from django.apps import apps 

for name, app in apps.app_configs.items(): 
    if name in ['OPTIONS-N']: 
     utils = app.module.utils 
+0

こんにちは、tobey、本当に有用なおかげだ。私は[OPTIONS-N ']ビットをうまく動作させることができませんが、optionsディレクトリに含まれるすべてのアプリケーションの一覧を表示するだけですか?または私はよく知らないいくつかの構文がありますか? – Tim

+0

また、これは私にエラーを与えます:module 'Options.Option1'は属性 'utils'を持っていません。 .options1 import utilsからインクルードしても大丈夫ですが、最初にコードのポイントを打ち負かすようなアプリケーションごとにその行が必要になります。なぜなら、動的なものにしたいからです。 – Tim

+0

はい、「Option-N」はオプションの一覧の省略形です。すべての "Option-N"フォルダに '__init __。py'が含まれていることを確認してください。 'からの行を追加する必要があるかもしれません。 import utils' there – Tobey

0

settings.pyは、標準のpythonファイルであるので、なぜあなたのビューにINSTALLED_APPSリストをインポートしていない、またはあなたがそれを必要とする、これまで:

方法に応じて
from settings import INSTALLED_APPS 

そしてちょうど

for app in INSTALLED_APPS: 
    ... 
+0

答えをありがとう。 INSTALLED_APPSは文字列のリストなので、これはうまくいくとは思えません。また、optionsフォルダに含まれているものだけでなく、すべてのアプリケーションを返します。 – Tim

+0

十分に公正です。私は必要なアプリケーションを並べ替えるために何らかの正規表現を適用することを想像していました。 – 16shells

関連する問題