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 中 '^$' 和 '' 的区别的主要内容,如果未能解决你的问题,请参考以下文章

芹菜与 djcelery

Django 框架简介

Django框架简介

Django框架的使用教程--视图和路由[二]

Django的使用

Django介绍