Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中迭代应用程序的子集_Python_Django_Python 3.x_Django Apps - Fatal编程技术网

Python 在Django中迭代应用程序的子集

Python 在Django中迭代应用程序的子集,python,django,python-3.x,django-apps,Python,Django,Python 3.x,Django Apps,作为Django项目的一部分,我的用户将能够从各种选项中进行选择。每个选项的功能存储在单独的应用程序中。我的项目结构如下所示: MyProject/ MyProject App1 App2 Options/ Option1/ Option2/ Option3/ … … manage.py from .. import Options survey = [ app.utils.foo(

作为Django项目的一部分,我的用户将能够从各种选项中进行选择。每个选项的功能存储在单独的应用程序中。我的项目结构如下所示:

MyProject/
    MyProject
    App1
    App2
    Options/
        Option1/
        Option2/
        Option3/
        …
    …
    manage.py
from .. import Options
survey = [ app.utils.foo() for app in Options]
Option1、Option2等都是一个应用程序,并在已安装的应用程序中列出。我的问题是:是否有一种方法可以迭代包含在选项目录中的每个应用程序。例如,假设每个应用程序都包含一个名为utils.py的文件,每个utils.py中都有一个名为foo的函数

有没有办法做到这一点:

MyProject/
    MyProject
    App1
    App2
    Options/
        Option1/
        Option2/
        Option3/
        …
    …
    manage.py
from .. import Options
survey = [ app.utils.foo() for app in Options]

如果做不到这一点,是否有一种方法可以迭代所有应用程序?也许我可以用django.apps做些什么吗?

取决于你如何配置你的apps.py

from django.apps import apps

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

嗨,托比,这真的很有帮助,谢谢。我无法让['OPTIONS-N']位正常工作,这只是你对包含在选项目录中的所有应用程序列表的简写吗?还是有一些语法我不熟悉?另外,这给了我一个错误:模块“Options.Option1”没有属性“utils”。如果我包括from.options1 import utils,它会正常工作,但是我需要为每个应用程序使用这一行,这首先会破坏代码的要点,因为我希望它是动态的。是的,Option-N是选项列表的简写。确保您的所有Option-N文件夹都包含一个_init__u; py.py。您可能需要从添加行。导入utils是的,这就是问题所在。Python包不会自动导入其模块/子包。谢谢