Python 如何覆盖具有名称空间url模式的Django视图?

Python 如何覆盖具有名称空间url模式的Django视图?,python,django,Python,Django,我正在使用名为foo的外部应用程序,这是我最喜欢的,但我需要扩展名为Bar的特定视图的功能。通常,我只是将扩展视图放在urls.py中,然后在include('foo.urls')中,并将其命名为相同的名称,以便解析器首先点击它: urlpatterns = [ ... url(r'^foo/path_to_bar$', CustomBar.as_view(), name='bar'), url(r'^foo/$', include('foo.urls')), .

我正在使用名为
foo
的外部应用程序,这是我最喜欢的,但我需要扩展名为
Bar
的特定视图的功能。通常,我只是将扩展视图放在
urls.py
中,然后在
include('foo.urls')
中,并将其命名为相同的名称,以便解析器首先点击它:

urlpatterns = [
    ...
    url(r'^foo/path_to_bar$', CustomBar.as_view(), name='bar'),
    url(r'^foo/$', include('foo.urls')),
    ...
]
问题是,
foo
在任何地方都使用命名空间URL,因此所讨论的视图实际上是由
foo:bar
引用的,并且上面的
include()
声明实际上应该是:

include('foo.urls', namespace='foo', app_name='foo')

这对于可恢复的应用程序来说显然很好,但我很难找到在我的项目中覆盖此视图的方法。有什么方法可以做到这一点,而不必重写对
reverse()
的所有调用以及在
foo
中使用
{%url%}
?这在本质上等同于对应用程序进行分叉,并首先破坏了重用视图的目的。

我不确定我是否理解这个问题<代码>{%url'foo:foo'%}将匹配应用程序中的url模式,并将
/foo/path\u返回到\u bar/
。然后,该URL将与您的自定义URL模式匹配。自定义视图的URL模式的名称应该无关紧要

如果原始应用程序使用的URL不同于
path\u-to\u-bar
,那么这将不起作用。在这种情况下,您仍然不必将所有调用更改为
reverse
——只需创建自己的
my\u foo\u url.py
,复制
foo/url.py
的内容,并将其包含在内