我想从所有网址中抓住,比如
if (!toState.resolve) { toState.resolve = {} };
或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
有人可以指出我的错误吗?
答案 0 :(得分:3)
有一个名为APPEND_SLASH
的Django设置,默认值为True
:
当设置为
True
时,如果请求URL与URLconf中的任何模式都不匹配且它不以斜杠结尾,则会向相同的URL发出HTTP重定向并附加斜杠。请注意,重定向可能会导致POST请求中提交的任何数据丢失。
APPEND_SLASH
设置仅在安装了CommonMiddleware时使用。
答案 1 :(得分:2)
感谢您的评论,我可以解决这个问题:
urlpatterns = [
url(r'^$', RedirectView.as_view(url="start"), name='index'),
url(r'^(?P<page>.+?)/?$', views.PageView.as_view(), name='page'),
]
+
量词太贪心,所以我用非贪婪的版本+?
取而代之。