提问人:bodger 提问时间:3/20/2020 更新时间:3/20/2020 访问量:95
Django 简单页面捕获所有内容
Django flatpages catch all
问:
我在 Django 中对简单页面使用 catch all 模式,如下所示:-
urlpatterns = [
path('somepath/', include('project.somepathapp.urls')),
path('anotherpath/', include('project.anotherpathapp.urls')),
etc.
]
urlpatterns += [
path('<path:url>/', views.flatpage),
]
在我的模板中,我使用:-
<a href="/about-us/">About Us</a>
以访问“关于”简单页面。但是 URL 模式会去掉最后一个斜杠,并将 URL /about-us(而不是 /about-us/)传递给简单页面视图。然后,简单页面视图发现 URL 不以斜杠结尾,将其添加回去,找到页面并重定向到该 URL,但添加一个额外的斜杠,以便 URL 现在是 /about-us//
如果我从 catch all 模式中删除最后一个斜杠,则在使用APPEND_SLASH之前,主路径(somepath/ 和 anotherpath/)中任何没有最后一个斜杠的 URL 都会与 catch all 模式匹配,并且由于没有包含该 URL 的页面,因此用户将获得 404。因此,像 /somepath/ 这样的 URL 会起作用,但 /somepath 不会。
我做错了什么?对我来说,这似乎是第 22 条军规。我不能使用中间件选项,因为它并不总是通过其他中间件视图传递,所以我被卡住了。
有什么想法吗?
答: 暂无答案
评论
url()
re_path()
//