这可能有点重复,但我找不到符合我需求的解决方案。
我有一个构建django-tables2的函数。我将model_class的参数作为字符串传递。现在可以是“应用程序”,“数据库”或“项目”,但最终会有更多。为了配置表,我设置了:
table = DatabaseTable(assets)
我希望能够传入model_class,以便根据所获得的输入类型使表动态化。类似的东西:
table = model_class + Table(assets)
(伪)
我不想对字典进行硬编码,因为我不确定最终会添加多少个值。我看到人们建议使用exec
,但这些建议都是其他威胁谋杀这些人家庭的用户所遵循的。
答案 0 :(得分:2)
在堆栈上已多次询问此问题并且答案总是相同的:当您想要名称和对象之间的关联时,一个显而易见的方法是使用字典。
我不想硬编码字典,因为我不知道有多少 最终会添加值。
所以你想避免像这样的情况
lookup = {'application': ApplicationTable,
'database': DatabaseTable,
'item': ItemTable}
因为您不想维护查找,对吧?这没关系,但是没有必要对这样的字典进行硬编码以动态检索对象。
如果您eval
的工作正如您所说的那样,那么ApplicationTable
,Itemtable
等范围内的这些名称必须来自某处。由于我不知道它们的定义位置以及新的定位,我将假设它们是从名为MyTables
from MyTables import ApplicationTable, Itemtable, BlahTable ...
这里的技巧是使用模块本身的dict
(读取:命名空间)。
import MyTables
my_string = 'item'
table = getattr(MyTables, my_string.capitalize() + 'Table')
答案 1 :(得分:0)
这是允许的吗?它有效。
table = eval(model_name.capitalize() + 'Table(assets)')
RequestConfig(request).configure(table)