Python 任意数量的搜索词

Python 任意数量的搜索词,python,regex,django,filter,Python,Regex,Django,Filter,我试图创建一个视图,该视图将接收任意数量的搜索词,并使用这些词过滤特定对象 我的想法是,url将有一个类似于以下内容的模式:/[property]=[value]/[property]=[value]/…,该模式可以在用户想要的时间内持续多久。然后,我可以通过执行以下操作来解析它:search=match.split('/')。然后我将遍历搜索中的每个项目,大致如下: results=myObject.objects.all() for item in search: items=ite

我试图创建一个视图,该视图将接收任意数量的搜索词,并使用这些词过滤特定对象

我的想法是,url将有一个类似于以下内容的模式:
/[property]=[value]/[property]=[value]/…
,该模式可以在用户想要的时间内持续多久。然后,我可以通过执行以下操作来解析它:
search=match.split('/')
。然后我将遍历搜索中的每个项目,大致如下:

results=myObject.objects.all()
for item in search:
    items=item.split('=')
    results=results.filter(items[0]=items[1])

不幸的是,我被告知关键字不能是表达式。有没有办法让关键字成为变量?谢谢

您可以将关键字参数预先构造为字典,并使用
**
语法传递它

>>> items = ['a','b','c']
>>> def print_kwargs(**kwargs):
...   for key,value in kwargs.iteritems():
...     print "%s = %s" % (key, value)
...
>>> d = {items[0] : items[1]}
>>> print_kwargs(**d)
a = b
例如:

d = {}
for item in search:
    items = item.split('=')
    d[items[0]] = items[1]
results = results.filter(**d)

你说“不幸的是,我被告知关键字不能是表达式”是什么意思?他想传递关键字参数,其中
items[0]
是一个关键字,
items[1]
是它的值。这很好,可能重复!谢谢还有一个问题。如果我需要基于对象中的属性进行过滤(即,我有对象A,它有一个对对象B的外键引用,我需要基于对象B所持有的属性进行过滤),我该怎么做?如果我不需要使用kwarg,它将相对简单,只需
results.filter(B_uuproperty=value)
。我怎么能用字典做到这一点呢?@dar2162我会先说我不知道Django,但如果它真的是
B_u属性=值
,那么只需将该键值对添加到字典中,如
d[B_u属性]=值
,然后再将其传递给过滤器。这个字典可以包含任何你想作为关键字参数处理的键值对。太棒了!尽管如此,它需要是一个串联字符串,即
property='B_uuuu%s'%items[0]
然后
d[property]=items[1]