小编Mic*_*hel的帖子

使用自定义url_path反转@list_route

如果我有一个包含以下代码的视图集:

class ExtraRouteViewset(viewsets.GenericViewSet):
    @list_route(methods=['get'])
    def somefunction(self, request):
        return Response({
            'key': 'value',
            'reverse': reverse('extraroute-somefunction'),
        })

    @list_route(methods=['get'], url_path='arguments/(?P<thing>[^/]+)')
    def arguments(self, request, thing):
        return Response({
            'key': thing,
            'reverse': reverse('extraroute-arguments', kwargs={'thing': 'something'}),
        })
Run Code Online (Sandbox Code Playgroud)

我希望这两种方法都有效.然而,第二个reverse提出了一个NoReverseMatch.检查网址格式(通过导航到不存在的网址)显示以下网址格式:

^demo/ ^ ^extraroute/arguments/(?P<thing>[^/]+)/$ [name='extraroute-arguments/(?P<thing>[^/]+)']
^demo/ ^ ^extraroute/arguments/(?P<thing>[^/]+)/\.(?P<format>[a-z0-9]+)$ [name='extraroute-arguments/(?P<thing>[^/]+)']
^demo/ ^ ^extraroute/somefunction/$ [name='extraroute-somefunction']
^demo/ ^ ^extraroute/somefunction/\.(?P<format>[a-z0-9]+)$ [name='extraroute-somefunction']
Run Code Online (Sandbox Code Playgroud)

视图名称似乎extraroute-arguments/(?P<thing>[^/]+)代替extraroute-arguments?事实上,如果我使用reverse('extraroute-arguments/(?P<thing>[^/]+)', kwargs={'thing': 'something'})它的话.我错过了一些非常明显的东西,或者这是一个错误django-rest-framework吗?

这是使用Django 1.8a和django-rest-framework 3.0.5.

python django django-rest-framework

10
推荐指数
1
解决办法
4452
查看次数

递归取消allOf CompletableFuture

如果我有

CompletableFuture<Something> future1 = service.request(param1);
CompletableFuture<Something> future2 = service.request(param2);
CompletableFuture<Void> many = CompletableFuture.allOf(future1, future2);
Run Code Online (Sandbox Code Playgroud)

我什么时候会发生什么many.cancel()?将future1future2一并取消?如果没有,最简单的方法是什么?我不愿意留住future1future2,只是为了能够取消他们时,我想取消many.

关于我为什么要这样做的一些背景:当接收一条数据时,我需要请求匹配的,可能未来的数据来执行计算.如果有更新的数据到达,我想取消先前计算的完成,因为结果将立即被新计算取代.

java java-8 completable-future

7
推荐指数
1
解决办法
1034
查看次数

广度优先版本的itertools.chain()

itertools那里chain,它将多个生成器组合在一起,实质上是对它们进行深度优先迭代,即chain.from_iterable(['ABC', '123'])产生A,B,C,1,2,3.但是,没有广度优先版本,或者是我错过了什么?当然izip_longest,但是对于大量的发生器来说,这感觉很尴尬,因为元组会非常长并且可能非常稀疏.

我想出了以下内容:

def chain_bfs(*generators):
    generators = list(generators)
    while generators:
        g = generators.pop(0)
        try:
            yield g.next()
        except StopIteration:
            pass
        else:
            generators.append(g)
Run Code Online (Sandbox Code Playgroud)

对我来说感觉有点冗长,是否有更多的Pythonic方法我错过了?这个功能是否适合加入itertools

python python-itertools

1
推荐指数
1
解决办法
177
查看次数