如何将字符串用作关键字参数?
具体来说,我想用一个字符串来随意过滤ORM(对象关系映射)。我试过用exec和eval这些方法,但遇到了很多问题。下面的代码虽然不能运行,但这是我能想到的最好的方式来说明我想要实现的目标。
from gblocks.models import Image
f = 'image__endswith="jpg"' # Would be scripted in another area, but passed as text <user input>
d = Image.objects.filter(f)
#for the non-django pythonistas:
d = Image.objects.filter(image__endswith="jpg")
# would be the non-dynamic equivalent.
3 个回答
1
eval
这个选项应该没问题,只要你把它包裹在整个表达式周围,而不仅仅是包裹f
部分就可以了。
f = 'image__endswith="jpg"'
d = eval('Image.objects.filter(' + f + ')')
3
你需要把关键词中的值分开,然后用关键词作为键,值作为值来建立一个字典。接着,你可以使用双星号的函数参数来处理这个字典。
所以……
keyword, sep, value = f.partition('=')
kwargs = {keyword: value.strip('"')}
d = Image.objects.filter(**kwargs)
请注意,这段代码假设关键词中不会有等号'='(它们只用来分开关键词和对应的值),而且值会用引号括起来。
112
在编程中,有时候我们需要把一些数据从一个地方转移到另一个地方。这就像把水从一个杯子倒到另一个杯子一样。这个过程可能会涉及到不同的工具和方法,具体取决于我们要处理的数据类型和目标。
例如,如果我们在处理文本数据,可能会用到字符串操作;而如果是数字数据,可能会用到数学运算。每种数据都有它自己的特点,所以我们需要选择合适的方法来处理它们。
另外,有时候我们还需要考虑效率,也就是在处理数据时,尽量让这个过程更快、更省资源。就像在厨房里做饭,如果能快速切菜、煮饭,就能节省时间,做出更多的菜。
总之,数据的转移和处理是编程中非常重要的一部分,掌握这些基本概念可以帮助我们更好地理解和使用编程语言。
d = Image.objects.filter(**{'image__endswith': "jpg"})