我注意到在Django中,文件urlpatterns
中有两种urls.py
格式:
urlpatterns = [
url(...),
url(...),
]
和
urlpatterns = pattern('',
url(...),
url(...),
)
第一个是url
实例列表,第二个调用pattern
模块,其中包含空字符串和多个url
个实例作为参数。
答案 0 :(得分:32)
在Django 1.8+中,urlpatterns应该只是url()
的列表。这个新语法实际上也适用于1.7。
urlpatterns = [
url(...),
url(...),
]
在Django 1.8中使用pattern
is deprecated的旧语法,并在Django 1.10中删除。
urlpatterns = pattern('',
url(...),
url(...),
)
使用旧语法,您可以提供前缀。给出in the docs的示例是
urlpatterns = patterns('news.views',
url(r'^articles/([0-9]{4})/$', 'year_archive'),
url(r'^articles/([0-9]{4})/([0-9]{2})/$', 'month_archive'),
url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', 'article_detail'),
)
但是,现在也不推荐使用视图的字符串参数,而应该提供callable。
答案 1 :(得分:7)
每the documentation,patterns
为:
带有前缀和任意数量的URL的函数 模式,并以Django格式返回URL模式列表 需要。
patterns()
的第一个参数是字符串prefix
。
它还提供了您可能想要使用它的原因示例:
from django.conf.urls import patterns, url urlpatterns = patterns('', url(r'^articles/([0-9]{4})/$', 'news.views.year_archive'), url(r'^articles/([0-9]{4})/([0-9]{2})/$', 'news.views.month_archive'), url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', 'news.views.article_detail'), )
在此示例中,每个视图都有一个共同的前缀 -
'news.views'
。 您可以,而不是为urlpatterns
中的每个条目输入该内容 使用patterns()
函数的第一个参数来指定 要应用于每个视图函数的前缀。考虑到这一点,上面的例子可以更简洁地写成:
from django.conf.urls import patterns, url urlpatterns = patterns('news.views', url(r'^articles/([0-9]{4})/$', 'year_archive'), url(r'^articles/([0-9]{4})/([0-9]{2})/$', 'month_archive'), url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', 'article_detail'), )
但请注意,此功能已弃用:
自1.8版以来已弃用:
urlpatterns
应该是django.conf.urls.url()
个实例的简单列表。
请注意the explanation as to why包括(有充分理由,显然!):
因此
patterns()
没有什么用处,在教学时也是一种负担 新用户(回答新手的问题"为什么我需要这个空的 string作为patterns()
的第一个参数?" )。