可以使用参数调用reverse,例如:
reverse('page', args=['page1'])
找到带有参数的url命名页面。
我的问题是,如果我使用Python的地图,我该怎么做?我想要这种形式的东西:
map(reverse, ITERABLE)
其中iterable是一堆带有args的命名url。到目前为止,我一直没有成功。
根据评论和Adam和rulfzid的答案进行编辑:
以下的iterable是一个适用于rulfzid的例子(根据我的评论建议编辑它)和Adam的回答
iterable = [['page', ['about']], ['home', None]]
我唯一的另一个问题是哪个会更快?
答案 0 :(得分:3)
您可以使用list comprehension:
[reverse(page, args=args) for page, args in ITERABLE]
当然,假设ITERABLE类似于[(page, args), (page1, arg1), ...]
答案 1 :(得分:2)
假设ITERABLE
中的每个项目都是由URL和参数组成的元组(或列表),您可以像这样使用lambda:
map(lambda x: reverse(x[0], args=x[1]), ITERABLE)
答案 2 :(得分:2)
听起来你需要functools.partial
。
from functools import partial
reverse_page = partial(reverse, 'page', None)
map(reverse_page, ITERABLE)
如果您需要映射,应该可以解决问题:
['page1', 'page2', 'page3']
没有url_conf
和page
作为视图。
您可以使用关键字args,但如果您不需要,则没有理由构造dict
。
使用lambda
或列表理解比iterable
的非平凡长度更快,因为reverse
和'page'
只需要查找一次。
编辑:如果您实际上没有反复使用一个参数,partial
不是您想要的,只是简单map
:
map(reverse, ('page', 'home'), itertools.repeat(None), ('about', None))
或者像这样:
map(reverse, *zip(('page', None, 'about'), ('home', None, None)))
取决于信息的组织方式。这里不需要lambda,lambda很慢。