dvt*_*tan 1 django django-urls
在文档中,它说 URL 是从上到下测试的:
/articles/2003/ 将匹配列表中的第一个模式,而不是第二个模式,因为模式是按顺序测试的,第一个模式是第一个通过的测试。请随意利用该顺序来插入像这样的特殊情况。这里,Django会调用函数views.special_case_2003(request)
但根据我的经验,这种情况并没有发生 - 我希望最后一个 URL 成为通配符,以匹配任何其他规则未捕获的内容,但此规则最终会捕获所有内容。我试过把它放在顶部和底部。
以下是要求: - 任何其他规则未捕获的内容都应匹配home。- 反向home应该匹配最短的接受的 URL,在这种情况下它将是空白的。
如何才能做到这一点?
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^api/', include('project.api')),
url(r'^', include('places.urls')),
]
Run Code Online (Sandbox Code Playgroud)
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
]
Run Code Online (Sandbox Code Playgroud)
一种方法是捕获所有其他 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'),
]
Run Code Online (Sandbox Code Playgroud)
视图.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'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8149 次 |
| 最近记录: |