django 中 '^$' 和 '' 的区别
Posted
技术标签:
【中文标题】django 中 \'^$\' 和 \'\' 的区别【英文标题】:difference between '^$' and '' in urls djangodjango 中 '^$' 和 '' 的区别 【发布时间】:2015-09-12 10:33:52 【问题描述】:django中以下两种url模式有什么区别?
url(r'^$', views.indexView, name='index'),
url(r'', include('registration.urls'))
据我了解,'^$' 和 '' 都指的是一个空字符串。 '^$' 和 '' 究竟是什么意思?
【问题讨论】:
仅作记录:这不是 Django 特定的,它只是普通的正则表达式语法,参见 docs.python.org/2.7/library/re.html#regular-expression-syntax 【参考方案1】:在正则表达式中,^
和 $
是特殊字符。
^
(插入符号):
^
匹配字符串的开头。
假设我的正则表达式是^a
,那么正则表达式将在字符串的开头查找a
:
'a' # Matches 'a' in 'a'
'abc' # Matches 'a' in 'abc'
'def' # Not match because 'a' was not at the beginning
$
(美元符号):
$
匹配字符串的结尾。
如果我的正则表达式是b$
,那么它将匹配字符串末尾的b
:
'b' # Matches 'b' in 'b'
'ab' # Matches 'b' in 'ab'
'abc' # Does not match
使用r'^$'
:
同时使用^
和$
作为^$
将匹配一个空行/字符串。
url(r'^$', views.indexView, name='index')
当Django遇到空字符串时,会跳转到index
页面。
使用r''
:
当你使用r''
时,Django 会在 URL 的任何地方寻找一个空字符串,这对每个 URL 都是如此。
所以,如果你的 urlpattern 是这样的:
url(r'', views.indexView, name='index')
您的所有网址都将转到index
页面。
【讨论】:
对r'^$'
的小幅改进:如果主机名后面的url中有空字符串,它将调用indexview
视图/函数。
"使用r''
,您所有的网址都会转到索引页面。":不,这取决于r''
模式之前的urlpatterns。如果一个匹配,它将被采取并且模式搜索将停止。
(使用 Django Rest):router.register(r'', viewsetname, 'views') 和 url(r'', viewsetname) 有什么区别?
这是最好的解释【参考方案2】:
^$
表示开头和结尾之间没有任何内容...这仅匹配空字符串
''
表示一个空字符串(但没有指定关于整个字符串的开头或结尾的任何内容),因此当您遇到字符串中的任何内容时,它会很好地匹配 'asdasd'
,例如在开始......剩下的被传递给新的 url 规则脚本(在这种情况下一切都保留)
如果您的第二条规则是'a'
,那么它将匹配asdasd
中的第一个a,并将sdasd
传递给新的url 匹配规则集
免责声明这可能过于简单化了,但基本上是正确的
【讨论】:
【参考方案3】:^$ - 它指定 URL 字符串的起点和终点。
' ' - URL 方法中的空字符串表示,如果遇到任何其他未在 url 模式中定义的 URL 模式,则应调用相应的空字符串视图
【讨论】:
【参考方案4】:^$ 表示你是匹配这两个特殊字符之间的字符串
【讨论】:
以上是关于django 中 '^$' 和 '' 的区别的主要内容,如果未能解决你的问题,请参考以下文章