首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >忽略django url regex中的尾斜杠

忽略django url regex中的尾斜杠
EN

Stack Overflow用户
提问于 2015-10-22 11:33:07
回答 2查看 6K关注 0票数 1

我想从所有的urls中捕捉到

example.com/<page_path>example.com/<page_path>/

<page_path>部分。变量可以是空的(重定向到example.com/start),也可以是指向所需页面的路径(大多数情况下是一个简单的字符串,但也可以包含斜杠)。

这是我目前的urls.py,它似乎能工作:

代码语言:javascript
运行
复制
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'),
]

但现在我试着简化这个表达式,并想出了如下结论:

代码语言:javascript
运行
复制
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/

有人能指出我的错误吗?

EN

回答 2

Stack Overflow用户

发布于 2015-10-22 11:43:39

有一个名为APPEND_SLASH的Django设置,默认值为True

当设置为True时,如果请求URL与URLconf中的任何模式不匹配,并且没有以斜杠结尾,则会向附加斜杠的同一个URL发出HTTP重定向。请注意,重定向可能导致在POST请求中提交的任何数据丢失。 只有在安装了APPEND_SLASH时才使用CommonMiddleware设置。

来源:Django文档:设置

票数 3
EN

Stack Overflow用户

发布于 2015-10-22 13:45:15

感谢您的评论,我可以用以下方法解决这个问题:

代码语言:javascript
运行
复制
urlpatterns = [
    url(r'^$', RedirectView.as_view(url="start"), name='index'),
    url(r'^(?P<page>.+?)/?$', views.PageView.as_view(), name='page'),
]

+量词太贪婪了,所以我用非贪婪版本+?代替了它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33280011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档