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

时间:2015-12-20 12:15:26

标签: python django

我使用了我最喜欢的名为display_errors = on 的外部应用程序,但我需要扩展一个名为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引用的,而上面的foo:bar声明实际应该是:

include()

对于可恢复的应用程序来说这显然很棒,但我很难找到在我的项目中覆盖此视图的方法。有没有办法这样做,而没有重写include('foo.urls', namespace='foo', app_name='foo') 的所有电话以及reverse(){% url %}的使用?这实际上等于分支应用程序并且首先打败了重用视图的目的。

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解这个问题。 {% url 'foo:foo' %}将匹配应用中的网址格式,并返回/foo/path_to_bar/。然后,该URL将与您的自定义网址格式匹配。自定义视图的网址格式名称不重要。

如果原始应用使用与path_to_bar不同的网址,则无法使用。在这种情况下,您仍然不必将所有来电更改为reverse - 只需创建您自己的my_foo_urls.py,复制foo/urls.py的内容,然后将其包含在内。