我想从所有的urls中捕捉到
example.com/<page_path>
或example.com/<page_path>/
<page_path>
部分。变量可以是空的(重定向到example.com/start
),也可以是指向所需页面的路径(大多数情况下是一个简单的字符串,但也可以包含斜杠)。
这是我目前的urls.py
,它似乎能工作:
urlpatterns = [
url(r'^/$', RedirectView.as_view(url="start"), name='index'),
url(r'^$', RedirectView.as_view(url="start"), name='index'),
url(r'^(?P<page>.+)/$', views.PageView.as_view(), name='page'),
url(r'^(?P<page>.+)$', views.PageView.as_view(), name='page'),
]
但现在我试着简化这个表达式,并想出了如下结论:
urlpatterns = [
url(r'^/?$', RedirectView.as_view(url="start"), name='index'),
url(r'^(?P<page>.+)/?$', views.PageView.as_view(), name='page'),
]
我想捕捉所有的东西,除了有一个尾随斜线。
奇怪的是,这是为了
example.com
example.com/
example.com/start
但不是为了
example.com/start/
有人能指出我的错误吗?
发布于 2015-10-22 11:43:39
有一个名为APPEND_SLASH
的Django设置,默认值为True
当设置为
True
时,如果请求URL与URLconf中的任何模式不匹配,并且没有以斜杠结尾,则会向附加斜杠的同一个URL发出HTTP重定向。请注意,重定向可能导致在POST请求中提交的任何数据丢失。 只有在安装了APPEND_SLASH
时才使用CommonMiddleware设置。
来源:Django文档:设置
发布于 2015-10-22 13:45:15
感谢您的评论,我可以用以下方法解决这个问题:
urlpatterns = [
url(r'^$', RedirectView.as_view(url="start"), name='index'),
url(r'^(?P<page>.+?)/?$', views.PageView.as_view(), name='page'),
]
+
量词太贪婪了,所以我用非贪婪版本+?
代替了它。
https://stackoverflow.com/questions/33280011
复制相似问题