Django Url Conf动态网址冲突

时间:2014-11-10 03:07:19

标签: python regex django urlconf

所以我在同一个应用程序中有两个模型具有几乎相同的url结构:

urlpatterns = patterns('',
    #....
    url(r'^prizes/', include(patterns('prizes.views',
        url(r'^$', 'PrizeStore_Index', name="prizestore"),
        url(r'^(?P<slug>[\w-]+)/$', PrizeCompanyDetailView.as_view(), name="prizecompany"),
        url(r'^(?P<slug>[\w-]+)/$', 'PrizeType_Index', name="prizetype"),
        url(r'^(?P<company>[\w-]+)/(?P<slug>[\w-]+)/$', 'PrizeItem_Index', name="prizepage"),
    ))),
    # Old Redirects
)

这里的问题是评论和PrizeType。我希望我的网址结构化,以便在特定类别下寻找奖品的用户转到/ prizes / prizetype。但如果他们想在某个公司看到奖品,那么他们会去/ prizes / companyslug /。但是,这两个网址自然会发生冲突。我总是可以改变网址结构,但我不愿意。我只是想知道是否有任何解决方法,不涉及更改网址结构。

2 个答案:

答案 0 :(得分:1)

我建议编写一个帮助器视图函数,它检查输入的URL是对应于公司还是类别,然后将请求重定向到适当的页面。

url(r'^prizes/', include(patterns('prizes.views',
    url(r'^$', 'PrizeStore_Index', name="prizestore"),
    url(r'^(?P<slug>[\w-]+)/$', prizehelper, name="prizehelper),

在哪里,您可以在prizehelper内查看,如果是公司或类别,请继续查看。

另一种方法可能是,更改您的网址结构,并反映它是哪种类型的网址

url(r'^prizes/', include(patterns('prizes.views',
    url(r'^$', 'PrizeStore_Index', name="prizestore"),
    url(r'^company/(?P<slug>[\w-]+)/$', PrizeCompanyDetailView.as_view(), name="prizecompany"),
    url(r'^category/(?P<slug>[\w-]+)/$', 'PrizeType_Index', name="prizetype"),

答案 1 :(得分:0)

有一个urlconf条目进入视图,该视图确定正在检查的类型,然后分派到该类型的相应视图。