python中是否有类似于php的$$变量的语法

2024-05-13 02:27:05 发布

您现在位置:Python中文网/ 问答频道 /正文

在python中有没有类似于php的$$变量的语法?我实际尝试的是基于一个值加载一个模型。在

例如,如果值是Song,我想导入Song模块。 我知道我可以使用if语句或lambada,但是使用类似于php的$$变量会非常方便。在

我想要的是类似的东西。在

from mypackage.models import [*variable] 

然后在视图中

^{pr2}$

*变量是在设置中定义的值,也可以来自comandline。它可以是项目中的任何模型。在


Tags: 模块from模型import视图ifsongmodels
3条回答
def load_module_attr (path):
    modname, attr = path.rsplit ('.', 1)
    mod = __import__ (modname, {}, {}, [attr])
    return getattr (mod, attr)

def my_view (request):
    model_name = "myapp.models.Song" # Get from command line, user, wherever
    model = load_module_attr (model_name)
    print model.objects.all()

我很确定你想要__import__()。在

读这个:docs.python.org: ^{}

This function is invoked by the import statement. It can be replaced (by importing the builtins module and assigning to builtins.__import__) in order to change semantics of the import statement, but nowadays it is usually simpler to use import hooks (see PEP 302). Direct use of __import__() is rare, except in cases where you want to import a module whose name is only known at runtime.

似乎您希望加载手头上所有可能匹配的模块/模型,并根据请求选择一个特定的模块/模型来使用。您可以使用“globals()”返回全局级变量的字典,该字典可通过字符串进行索引。所以如果你做类似globals()['Song']的操作,它会给你一个歌曲模型。这很像PHP的$$,只是它只获取全局范围的变量。对于局部作用域,必须调用locals()。在

下面是一些示例代码。在

from models import Song, Lyrics, Composers, BlaBla

def xyz(request):
    try:
        modelname = get_model_name_somehow(request):
        model =globals()[modelname]
        model.objects.all()
    except KeyError:
        pass # Model/Module not loaded ... handle it the way you want to 

相关问题 更多 >