在docs中,它表示网址是从上到下进行测试的:
/ articles / 2003 /将匹配列表中的第一个模式,而不是第二个模式,因为模式按顺序进行测试,第一个模式是第一个要通过的测试。随意利用订单插入这样的特殊情况。这里,Django会调用函数views.special_case_2003(request)
但是根据我的经验,这并没有发生 - 我希望最后一个URL是一个通配符,以匹配任何其他规则未捕获的内容,但此规则最终会捕获所有内容。我试过把它放在顶部和底部。
以下是要求:
- 未被其他规则捕获的任何内容都应与home
匹配。
- home
的反向应与最短接受的网址匹配,在这种情况下,它将为空白。
如何实现这一目标?
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^api/', include('project.api')),
url(r'^', include('places.urls')),
]
places.urls
:
app_name = 'places'
urlpatterns = [
url(r'^([0-9]+)/$', TemplateView.as_view(template_name=app_name + '/detail.html'), name='detail'),
url(r'^', TemplateView.as_view(template_name=app_name + '/home.html'), name='home'), # Single page app
]
答案 0 :(得分:2)
这样做的一种方法是捕获所有其他URL并重定向到home的url,这将为home保留一致的urlconf。代码如下所示,但如果您希望其他网址没有重定向直接转到主页,只需更改下面url
中最终urlpatterns
引用的视图。
<强> urls.py 强>
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^api/', include('project.api')),
url(r'^', include('places.urls')),
# catch all other urls
url(r'^.*/$', views.redirect_to_home,name='redirect-to-home'),
]
<强> views.py 强>
from django.shortcuts import redirect
from django.core.urlresolvers import reverse_lazy
def redirect_to_home(request):
# assuming home has an urlconf name of 'home'
return redirect(reverse_lazy('home'))