在python中有没有类似于php的$$variable的语法?我实际上尝试的是基于一个值加载一个模型。
例如,如果值是Song,我想导入Song模块。我知道我可以使用if语句或lambada,但是类似于php的$$variable的东西会更方便。
我所追求的是类似于此的东西。
from mypackage.models import [*variable] 然后在视图中
def xyz(request):
xz = [*variable].objects.all() *变量是在设置中定义的值,也可以来自命令行。它可以是项目中的任何模型。
发布于 2009-08-20 23:33:19
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()发布于 2009-08-21 06:43:51
我很确定你想要__import__()。
请阅读:docs.python.org: __import__
此函数由import语句调用。为了改变import语句的语义,可以替换它(通过导入内置模块并赋值给
builtins.__import__),但是现在使用导入钩子通常更简单(参见PEP 302)。直接使用__import__()的情况很少,除非您想导入一个只有在运行时才知道其名称的模块。
发布于 2009-08-21 10:49:50
您似乎希望加载手头上所有可能匹配的模块/模型,并根据请求选择一个特定的模块/模型来使用。您可以使用"globals()“返回全局变量的字典,该字典可通过字符串进行索引。所以如果你做一些像globals()' Song‘这样的事情,它会给你提供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 https://stackoverflow.com/questions/1309366
复制相似问题