Django:urls.py中的urlpatterns格式

时间:2015-07-17 10:59:51

标签: django url

我注意到在Django中,文件urlpatterns中有两种urls.py格式:

urlpatterns = [
    url(...),
    url(...),
]

urlpatterns = pattern('',
    url(...),
    url(...),
)

第一个是url实例列表,第二个调用pattern模块,其中包含空字符串和多个url个实例作为参数。

  1. 两者有什么区别?
  2. 第二种格式的空字符串的用途是什么?
  3. 建议使用哪一个?

2 个答案:

答案 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 documentationpatterns为:

  

带有前缀和任意数量的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()的第一个参数?" )。