Django URL多路径模式不是内射的

时间:2017-05-16 19:22:04

标签: python django

我正在尝试通过调整此SO post中解释的多路径模式在我的Django项目中包含可选的URL模式。

在我的urls.py文件中,我有以下模式。

urlpatterns = [
    url(r'^(?P<slug>[-\w]+)\/?$', View.as_view()),
    url(r'^(?P<section>[-\w]+)\/(?P<slug>[-\w]+)\/?$', View.as_view()),
    url(r'^(?P<section>[-\w]+)\/(?P<tag>[-\w]+)\/(?P<slug>[-\w]+)\/?$',View.as_view()),
]

参数sectiontagslug对应于模型字段。因此,对/foo/bar/baz的HTTP请求返回带有“foo”部分,“bar”标记和“baz”slug的模型实例。并非所有模型实例都有sectiontag,这些参数都是可选的。

如果您将URL调度程序视为具有URL域和模型实例的codomain的函数,那么我使用的模式不是一个内射函数。 /baz/foo/baz/foo/bar/baz返回相同的模型实例,但只有最后一个网址才会返回模型实例。

简而言之,如果且仅当请求的网址为urlpatterns时,如何配置/foo/bar/baz以返回我的foo-bar-baz模型?

1 个答案:

答案 0 :(得分:0)

我认为在视图中处理起来会容易得多。在您看来,我查看了请求,如果URI格式错误,请将重定向发送到正确的URI。这比试图强制进入URL调度程序要容易得多。