我在Django应用程序中为此问题苦苦挣扎:
我的主应用程序urls文件包含以下两行:

url(r'^root-pattern-1/', include('loan.urls')),
url(r'^root-pattern-2/', include('loan.urls')),


在我的loan.urls中,有以下两个条目:

url(r'^search/$', Search.as_view(),
            name='personal-loan-result', kwargs={'loantype': LOAN_TYPE_PERSONAL}),
url(r'^search/$', Search.as_view(loantype=LOAN_TYPE_CREDIT),
            name='creditcard-loan-result', kwargs={'loantype': LOAN_TYPE_CREDIT}),


问题是,当我调用reverse('creditcard-loan-result')时,该URL看起来不错,但它调用的是名为“ personal-loan-result”的URL,这是第一个条目。
我读了很多书,在这里的其他问题中看到的选项包括带有空模式的我的loan.urls文件或更改url条目的顺序。
我还有其他选择吗?更改顺序在这种特定情况下不起作用,我不喜欢将网址包含为空模式的想法。

最佳答案

我不清楚您为什么要两次包含loan.urls,如果我误解了您的问题,我们深表歉意。

url(r'^search/$', Search.as_view(),
        name='personal-loan-result', kwargs={'loantype': LOAN_TYPE_PERSONAL}),
url(r'^search/$', Search.as_view(loantype=LOAN_TYPE_CREDIT),
        name='creditcard-loan-result', kwargs={'loantype': LOAN_TYPE_CREDIT}),


这些都是针对相同的URL /search/。不管是调用reverse('personal-loan-result')还是reverse('creditcard-loan-result'),浏览器中显示的URL就是/search/,而Django将始终使用匹配的第一个url模式。

如果要将结果定向到第二种模式,则需要两个不同的正则表达式,例如可以使用^search/personal/$^search/credit/$

10-02 14:14