Django Flatpage包罗万象

Django Flatpage包罗万象,django,django-flatpages,Django,Django Flatpages,在Django中,我对flatpages使用了catch-all模式,如下所示:- urlpatterns = [ path('somepath/', include('project.somepathapp.urls')), path('anotherpath/', include('project.anotherpathapp.urls')), etc. ] urlpatterns += [ path('<path:url>/', views.f

在Django中,我对flatpages使用了catch-all模式,如下所示:-

urlpatterns = [
    path('somepath/', include('project.somepathapp.urls')),
    path('anotherpath/', include('project.anotherpathapp.urls')),
    etc.
]

urlpatterns += [
    path('<path:url>/', views.flatpage),
]
urlpatterns=[
路径('somepath/',包括('project.somepathapp.url'),
路径('anotherpath/',包括('project.anotherpathapp.url'),
等
]
URL模式+=[
路径(“/”,views.flatpage),
]
在我的模板中,我使用:-

<a href="/about-us/">About Us</a>

进入关于平面的页面。但是URL模式去掉了最后一个斜杠,并将URL/about-us(与/about-us/)传递给flatpage视图。然后flatpage视图发现URL不是以斜杠结尾,将其添加回,找到页面并重定向到该URL,但添加了一个额外的斜杠,以便URL现在/关于我们//

如果我从catch-all模式中删除了最后一个斜杠,那么在使用APPEND_斜杠之前,主路径(somepath/和另一个路径/)中没有最后一个斜杠的任何URL都会被catch-all模式匹配,因为没有带有该URL的页面,所以用户会得到404。所以像/somepath/这样的URL可以工作,但是/somepath不行

我做错了什么?对我来说,这似乎是第二十二条军规。我不能使用中间件选项,因为它并不总是通过其他中间件视图传递,所以我被卡住了


有什么想法吗?

最近在文档中的示例中添加了尾随斜杠。如果这还没有解决问题(或者它创建了另一个问题),那么可能值得在票据中添加注释。您也可以尝试从。如果愿意,请更新到
re\u path()
。谢谢@Alasdair。我认为它创造了另一个。有趣的是,django.contrib.flatpages.url中的代码没有它,因此如果从那里包含它,它就没有它。出于某种原因,我没有想到使用re_路径。如果我使用re_path(“^(?P.+/)$”,views.flatpage),它似乎会起作用,因此,目前,我会这样做。非常感谢。很高兴这起作用。顺便说一句,我在Django bugtracker上看到了你的评论,我认为你在结尾处缺少了
/
,用户将被重定向到“/someurl”。很好的地方-它在标记中-但出于某种原因,它被解释为空白。我现在强迫它-看起来不太好,但我不知道如何“正确地”去做,这会让信息传递出去。谢谢。最近在文档中的示例中添加了尾随斜杠。如果这还没有解决问题(或者它创建了另一个问题),那么可能值得在票据中添加注释。您也可以尝试从。如果愿意,请更新到
re\u path()
。谢谢@Alasdair。我认为它创造了另一个。有趣的是,django.contrib.flatpages.url中的代码没有它,因此如果从那里包含它,它就没有它。出于某种原因,我没有想到使用re_路径。如果我使用re_path(“^(?P.+/)$”,views.flatpage),它似乎会起作用,因此,目前,我会这样做。非常感谢。很高兴这起作用。顺便说一句,我在Django bugtracker上看到了你的评论,我认为你在结尾处缺少了
/
,用户将被重定向到“/someurl”。很好的地方-它在标记中-但出于某种原因,它被解释为空白。我现在强迫它-看起来不太好,但我不知道如何“正确地”去做,这会让信息传递出去。谢谢