在Django 1.8中,urls.py
以这种方式编写:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/([0-9]{4})/$', views.year_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]
在Django 1.7中,urls.py
看起来像这样:
from django.conf.urls import patterns, url
from . import views
urlpatterns = patterns('',
url(r'^articles/2003/$', views.special_case_2003),
url(r'^articles/(\d{4})/$', views.year_archive),
url(r'^articles/(\d{4})/(\d{2})/$', views.month_archive),
url(r'^articles/(\d{4})/(\d{2})/(\d+)/$', views.article_detail),
)
有人可以解释为什么存在差异 - 尤其是括号和圆括号([
和(
)和patterns()
函数?什么是理论背景,以及它实际上是如何表现出来的?
答案 0 :(得分:4)
在1.7中,您可以使用定义视图导入路径的字符串,而不是实际的视图函数。模式的第一个参数是将用于每个后续视图的前缀。当包含来自同一模块的多个视图时,这减少了重复,即:
urlpatterns = patterns('myapp.views',
url(r'^articles/2003/$', 'special_case_2003'),
url(r'^articles/(\d{4})/$', 'year_archive'),
url(r'^articles/(\d{4})/(\d{2})/$', 'month_archive'),
url(r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'article_detail'),
)
然而,这是进口“魔力”没有充分理由。它可以隐藏导入错误,总体上使调试错误的url模式变得更加困难。因此,在1.8中不推荐使用字符串而不是视图函数,并且将在1.10中删除。
因为patterns()
除了为基于字符串的视图导入添加前缀之外没有任何其他目的,所以这也已被弃用,并将在1.10中删除。
答案 1 :(得分:2)
patterns()用于很少的目的,在教授新内容时是一种负担 用户(回答新手的问题“为什么我需要这个空白 string作为patterns()的第一个参数?“)。出于这些原因,我们 正在弃用它。更新代码就像确保代码一样简单 urlpatterns是django.conf.urls.url()实例的列表