我在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/$
。