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
的内容,并将其包含在内